将非bean POJO包装到Javabean中

将非bean POJO包装到Javabean中,java,javabeans,Java,Javabeans,我正在尝试将对象属性从JavaBean映射到非BeanPojo(没有设置器的第三方库对象)。观察源代码,对象映射器库依赖于setters方法来设置属性值集 我的问题是:是否有一个库将这种非bean POJO封装到JavaBean中?(基本上为所有字段生成setter和getter,并使用反射来正确地设置可访问(true)的非公共字段,等等),这样我就可以将属性映射到生成的JavaBean中,一旦填充了它的所有字段,我就可以从中提取/转换回底层的非bean POJO了 我决定使用JDTO作为我选择

我正在尝试将对象属性从JavaBean映射到非BeanPojo(没有设置器的第三方库对象)。观察源代码,对象映射器库依赖于setters方法来设置属性值集

我的问题是:是否有一个库将这种非bean POJO封装到JavaBean中?(基本上为所有字段生成setter和getter,并使用反射来正确地设置可访问(true)的非公共字段,等等),这样我就可以将属性映射到生成的JavaBean中,一旦填充了它的所有字段,我就可以从中提取/转换回底层的非bean POJO了

我决定使用JDTO作为我选择的对象映射库


提前谢谢

可以将不可变类的实例包装在动态代理(java.lang.reflection.InvocationHandler)中。代理反过来可以使用反射来提供您喜欢的操作。ApacheBeanutils可以在这方面提供帮助,Hibernate使用CGLIB来加速这一过程

可能会有这样的用例,比如在第三方库中修复错误,但这种情况很少见。如果是这样,aspectj及其拦截器也会有所帮助

因此,推荐的方法是将值从不可变类的实例复制到另一个可变类的实例中,更改其中的状态,然后以某种“官方”方式将其持久化。这样做的原因已经在JB Nizet的精彩评论中描述过,因此他值得称赞

观察源代码,对象映射器库依赖于 关于属性值集的setters方法

嗯,这取决于图书馆。如果你的意思是apachebeanutils,它们非常保守,它们要求getter和setter的类型完全匹配,只对原始布尔类型等使用
isField
约定限制较少,但我使用的版本(不过这是大约5年前的版本)没有处理返回setter的过程(对于设定器模型)


我建议您不要使用限制性工具,而应该使用分叉和修改现有工具。前面提到的Apache Beanutils具有许可证,并且Apache代码通常可读性很强,易于修改。然后,您可以直接实现从公共字段读取,通过构造函数设置字段,如果Java安全设置允许直接访问私有成员(它可能在大多数应用服务器上都不起作用,这设置了安全标志以禁止这样做).

如果没有setter,可能是有充分的理由的。该类的作者希望对象是不可变的,并且是线程安全的,或者希望通过不逐个设置属性来维护一些不变量。通过反射访问其私有字段破坏了封装,并且在采用下一个v图书馆的Erth.考虑将状态复制到其他对象,而不是修改属性封装的对象。