0

我似乎遇到了这个问题,当我通过 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);
}
4

1 回答 1

0

为什么构造函数返回一个不同的类 CustomBean - 你能发布整个源代码吗?

编辑:将评论中的答案添加到主要答案中

对不起,我被最初的帖子误导了。尝试这个

<constructor-arg index="1" ref="SuperBean"/>
于 2013-08-08T05:10:58.713 回答