Java @组件与父级?
有没有办法将Java @组件与父级?,java,spring,Java,Spring,有没有办法将与@Component注释一起使用(使用注释创建Springbean) 我想使用@Component注释创建具有“springparent”的springbean 有可能吗?在我的评论之后,这段XML <bean id="base" abstract="true"> <property name="foo" ref="bar"/> </bean> <bean class="Wallace" parent="base"/> &l
与@Component注释一起使用(使用注释创建Springbean)
我想使用@Component注释创建具有“springparent”的springbean
有可能吗?在我的评论之后,这段XML
<bean id="base" abstract="true">
<property name="foo" ref="bar"/>
</bean>
<bean class="Wallace" parent="base"/>
<bean class="Gromit" parent="base"/>
Wallace
和Gromit
现在可以访问commonFoo
属性。您也可以覆盖它,例如在@PostConstruct
中
顺便说一句,我真的很喜欢XML中的
parent
特性,它可以让bean保持干燥,但Java方法似乎更干净。只是遇到了相同的构造。。(一个通用抽象父类,它使用bean-with-context.xml-declaration作为组件扫描注入的潜在实现)
这是我在@Component类中可以做的:
@Autowired
public void setBeanUsedInParent(BeanUsedInParent bean) {
super.setBeanUsedInParent(bean);
}
// abstract getter in parent Class
public abstract BeanUsedInParent getBeanUsedInParent();
@Autowired
private BeanUsedInParent beanUsedInParent;
@Override
public BeanUsedInParent getBeanUsedInParent() {
return this.beanUsedInParent;
}
…我最终做了什么(更好,因为它清楚地表明注入在对象上而不是在类上工作)-如果您能够修改父类:
@Autowired
public void setBeanUsedInParent(BeanUsedInParent bean) {
super.setBeanUsedInParent(bean);
}
// abstract getter in parent Class
public abstract BeanUsedInParent getBeanUsedInParent();
@Autowired
private BeanUsedInParent beanUsedInParent;
@Override
public BeanUsedInParent getBeanUsedInParent() {
return this.beanUsedInParent;
}
…将实际bean及其注入留给实际实现(@Component类):
你不能只用继承吗?基类中的自动连接将以同样的方式工作。@Tomasz Nurkiewicz我有一个用xml定义的spring父bean(它有一些属性设置为“默认”值)。这是我无法改变的。我补充了一个答案来进一步解释我的想法。你能再详细解释一下为什么它不适合你的需要吗?为什么不能更改XML中的父定义?我恐怕无法从注释中引用父项……如果
base
bean将用XML定义,无论是否创建人工bean
类,Wallace
和Gromit
都将通过组件扫描创建,那么您的示例将不起作用。