【发布时间】:2016-02-26 15:03:09
【问题描述】:
我正在处理一些在 xml 上使用 spring bean 定义的遗留代码。 我正在构建的模块使用注释。
问题是有时我需要覆盖旧的 bean 定义,所以我也需要将我的 bean 放在 xml 中。
我有以下几点:
public class BeanIAmOverriding {
private MyAnnotatedBean bean;
}
@Component
public class MyAnnotatedBean {
private Repository repo;
}
@Repository
public class Repository {
@Transational
public Something find(...)
}
Xml 文件:
<bean id="bean" class="a.b.c.BeanIAmOverriding"/>
在这种情况下,我的存储库没有使用事务方面的代理。
我什至尝试只是给它起别名,但同样的事情发生了。 我目前的解决方法是实现 BeanFactoryAware。
你有更好的想法吗?
编辑: 让我澄清一下。 我确实知道依赖注入,我只是省略了一些我认为在上下文中不相关的配置,但它们就在这里。
我想做这样的事情:
<bean id="bean" class="a.b.c.BeanIAmOverriding">
<constructor-arg index="0" ref="myAnnotatedBean"/>
</bean>
这行不通。当我这样做时,我的存储库不会被事务方面代理。
所以我有这个解决方法:
public class BeanIAmOverriding implements BeanFactoryAware{
//private MyAnnotatedBean bean;
private BeanFactory beanFactory;
public void something(){
beanFactory.getBean(MyAnnotatedBean.class).doSomething();
}
@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
this.beanFactory = beanFactory;
}
}
【问题讨论】:
-
你如何注入
BeanIAmOverriding.bean? ...因为它看起来将保持为空。 -
@Augusto 解决方法:
public class BeanIAmOverriding implements BeanFactoryAware { private MyAnnotatedBean bean; }
标签: java xml spring spring-mvc