java - 如何使用反射以外的方式填充 JavaBean

标签 java reflection javabeans java-bytecode-asm

你知道我是否可以填充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 是如何做到这一点的?

谢谢 卡洛

最佳答案

从 XML 填充 JavaBean 的唯一更快的方法(即比使用反射更快)是编写或生成一些绑定(bind)代码,这些代码使用从 XML(在本例中是从 XML 属性)提取的值来调用 setter。

  • 手动编写绑定(bind)代码是最简单的方法...只要您不需要编写太多内容。

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

  • 可以使用字节码生成技术(例如 BCEL 或 ASM)生成代码。

  • 可能存在一些现有的 XML 到 JavaBean 绑定(bind)生成器,尽管现有的绑定(bind)很可能使用反射而不是代码生成。

<小时/>

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

关于java - 如何使用反射以外的方式填充 JavaBean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5529662/

相关文章:

java - 如何使用公历在Java中通过出发时间减去到达时间来获得持续时间?

java - 无法获取时间戳值

Scala:识别值类的对象

java - 反射: The Enum is Public so is The method then Why IlegalAccessException Is Coming?

java - 为什么在 javabean 中创建无参数构造函数成为惯例?

java - 使用 DBUnit 测试数据库时如何忽略表的现有元素

java - Sonar 不显示代码覆盖率

java - 将 Java 作为 Web 应用程序运行

java - 如何将 Field(Reflection) 的值设置为 POJO?

java - ClassFormatError:类文件 javax/mail/MessagingException 中非 native 或抽象方法中的缺失代码属性