0

你知道我是否可以填充一个javabean,但我不想使用反射。

例如,我有这个 xml 模板来填充它

示例 XML 文件

<property name = "card" value = "cdd"/>

public class Customer {
    private String card;

     public void setCard(String card) {
          this.card = card;
     }

     public String getCard() {
     }

}

我想在 Java bean 上调用 setCard 但我不想使用反射,因为我以前使用过它而且速度很慢,

有没有其他选择?例如,Hibernate 是如何做到的?

谢谢卡洛

4

3 回答 3

1

从 XML 填充 JavaBean 的唯一更快的方法(即比使用反射更快)是编写或生成一些绑定代码,这些代码使用从 XML(在这种情况下,从 XML 属性)提取的值调用设置器。

  • 手工编写绑定代码是最简单的方法……前提是您无需编写太多内容。

  • 代码可以作为源代码生成并编译。

  • 可以使用 BCEL 或 ASM 等字节码生成技术生成代码。

  • 可能有一些现有的 XML-to-JavaBean 绑定生成器,尽管现有绑定很可能使用反射而不是代码生成。


但是,目前尚不清楚这是否值得费心避免反思。虽然反射的成本相对较高,但 XML 的成本可能要高得多。我建议您在决定使用更复杂的实现方法之前进行一些分析。

于 2011-04-03T13:48:56.177 回答
0

我很确定 Hibernate 在底层使用反射 API。Groovy 还为自动生成和使用 bean getter/setter 提供了一些很好的支持,它们最终也使用了底层反射。

现在有一个选项,您可以对解析器进行硬编码以读取 xml 并在给定 name 属性的情况下调用适当的设置器,但是您会遇到解析器变得脆弱的问题(如果有意义的话,当您的模型发生更改时)。

于 2011-04-03T12:58:02.553 回答
0

如果 Bean 是您的,您可以实现如下接口:

/** Tries to set the property named key with the value given and returns true for success or false otherwise. */
boolean set(String key, Object value);

然后简单地转换到该接口并尝试使用该方法来设置属性。它确实需要在 bean 中进行一些工作 - 但要避免反射。

于 2011-04-03T12:59:21.103 回答