我似乎遇到了这个问题,当我通过 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 配置的类似乎有一个不同的实例,因为在通过 xml 配置的类访问对象时不会反映对对象SuperBean
所做的更改。SuperBean
那么我怎样才能确保这里只有一个实例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);
}