有没有办法将<bean parent="someParent">
与@Component注释一起使用(使用注释创建spring bean)?
我想使用@Component注释创建具有“spring parent”的spring bean。
有可能吗?
答案 0 :(得分:6)
根据我的评论,这段XML
<bean id="base" abstract="true">
<property name="foo" ref="bar"/>
</bean>
<bean class="Wallace" parent="base"/>
<bean class="Gromit" parent="base"/>
或多或少与此代码等效(请注意,我创建了人工Base
类,因为Spring中的抽象bean不需要class
):
public abstract class Base {
@Autowired
protected Foo foo;
}
@Component
public class Wallace extends Base {}
@Component
public class Gromit extends Base {}
Wallace
和Gromit
现在可以访问常见的Foo
媒体资源。你也可以覆盖它,例如在@PostConstruct
。
BTW我真的很喜欢XML中的parent
功能,它允许保持bean DRY,但Java方法看起来更清晰。
答案 1 :(得分:0)
刚刚遇到相同的Construct ..(一个使用Beans的一般抽象父类 - 带有context.xml声明,用于组件扫描注入的潜在实现)
这是我在@Component类中可以做到的:
@Autowired
public void setBeanUsedInParent(BeanUsedInParent bean) {
super.setBeanUsedInParent(bean);
}
..我最终做了什么(更好,因为它清楚地表明注入适用于不在类上的对象) - 并且如果你能够修改父类:
// abstract getter in parent Class
public abstract BeanUsedInParent getBeanUsedInParent();
..将实际的Beans以及它们的注入留给实际的实现(@Component类):
@Autowired
private BeanUsedInParent beanUsedInParent;
@Override
public BeanUsedInParent getBeanUsedInParent() {
return this.beanUsedInParent;
}