我似乎遇到了这个问题,当我使用注释为某些类配置依赖注入时,以及通过xml文件中的配置为其他类配置依赖注入。
我有一个构造函数注入,我需要将SuperBean
对象注入到两个类的构造函数中,并且它们获得SuperBean
的不同实例,因为一个配置了注释而另一个配置在xml文件中,所以SuperBean
定义如下:
@Component("SuperBean")
public class SuperBean extends InjectableBean {
具有注释配置构造函数的类的构造函数:
@Autowired
public CustomBean(@Value("Any name") String name, @Qualifier("SuperBean") SuperBean superBean) {
super();
this.superBean = superBean;
this.name = name;
}
另一个类的构造函数:
public CustomXmlBean(String name, SuperBean superBean) {
super(name, superBean);
}
它是xml文件中的配置:
<bean id="CustomXmlBean" class="org.arturas.summerfav.beans.CustomXmlBean">
<constructor-arg name="name" type="String" value="The Big Custom XML Bean" />
<constructor-arg>
<bean name="SuperBean" class="org.arturas.summerfav.beans.SuperBean" />
</constructor-arg>
</bean>
所以我似乎注意到xml配置的类似乎有SuperBean
的不同实例,因为在SuperBean
对象上进行的更改在通过xml访问时不会反映出来配置类。
那么如何确保SuperBean
只有一个实例? (假设我想保留两种配置方式 - 通过xml文件和注释)
修改:添加更多来源:
CustomBean
类:
@Component("CustomBean")
public class CustomBean extends InjectableBean {
private String name;
private SuperBean superBean;
/**
* @param name - Bean name
*/
@Autowired
public CustomBean(@Value("Any name") String name, @Qualifier("SuperBean") SuperBean superBean) {
super();
this.superBean = superBean;
this.name = name;
}
CustomXmlBean
类:
public class CustomXmlBean extends CustomBean {
public CustomXmlBean(String name, SuperBean superBean) {
super(name, superBean);
}
答案 0 :(得分:0)
为什么构造函数返回另一个类CustomBean - 你能发布整个源吗?
编辑:将评论中的答案添加到主要答案中
抱歉,我在最初的帖子中误导了。试试这个
<constructor-arg index="1" ref="SuperBean"/>