我有两个对象Node1和Node2,两者都使用Bean1(JavaBean)。
我试图在Node1和Node2中包含Bean1的属性,而不手动复制Bean1的属性。另外,我也试图在两个对象中重用Bean1的BeanInfo。
我正在考虑使用cglib,但它有可能吗?
更多详情: 节点正在建模作业输入,即,为Job1输入Node1,依此类推。输入类型可以在内部具有公共类型,即Bean1。比方说,Bean1有一个属性bean1Prop,Node1有一个属性node1Prop,而Node2有一个属性node2Prop。
我需要类似的东西 Node1 {node1Prop,bean1Prop}和Node2 {node2Prop,bean1Prop}。请注意,每个节点在init期间都有一个单独的Bean1实例。现在,我可以通过委托手动获取属性,我不想这样做以避免代码重复。我只是想告诉每个节点类我想要使用Bean1的bean属性。
cglib似乎能够在运行时创建这样的对象。但我想运行时类型只是一个对象?
此外,Bean1有一个beaninfo类,我希望在Node1BeanInfo中重用(通过getAdditionalBeanInfo()),类似于Node2BeanInfo。
我不确定是否将(通过JavaBeanTool)识别Node1BeanInfo和Node2BeanInfo作为cglib的运行时生成对象的beaninfo类。
我必须补充说我之前从未使用过cglib。
我的主要目标是避免代码重复,在这种情况下,当常见类型用于许多作业输入时(这很常见),这将是很重要的。
感谢您对此的看法。
答案 0 :(得分:0)
我不确定你的意思,但听起来像这样:
public class Node1 {
private Bean1 bean1;
public Node1(Bean1 bean1) {
this.bean1 = bean1;
}
}
public class Node2 {
private Bean1 bean1;
public Node2(Bean1 bean1) {
this.bean1 = bean1;
}
}
请注意:如果Node1和Node2都指向同一个Bean1实例,则必须担心一个类的更改会立即对另一个类可见。你可以通过这种安排给自己带来一些令人讨厌的惊喜。
答案 1 :(得分:0)
是的,Beans是重用代码的好方法。
不,没有理由说Node1和Node2不能共享Bean1来实现相同的功能。实际上,他们应该。
到目前为止,非常好......
但是,如果您想在节点之间共享STATE,那么您的第一个问题是您希望如何存储状态。
最简单的方法:写一个明文属性文件
ALTERNATIVE APPROACH:将属性存储在数据库中
无论采用哪种方法,您都可以: a)让bean在启动时读取属性(从数据库,属性文件等) b)让您的客户端查询bean的属性值
还有另一个替代方法:只需对bean中的值进行硬编码:)