Spring原型bean与单例bean和依赖注入相结合.有一种方法只是配置吗?

Yan*_*eve 22 java spring

我有一个单例bean,它需要每次调用一个函数来返回对不同(新)原型bean的引用.我能想到的唯一方法是通过调用其getBean()方法以编程方式从BeanFactory/ApplicatioContext中检索新的原型bean实例.代码示例将遵循......

有一个更好的方法吗?只有通过配置,希望?(我个人怀疑有...)

<bean id="protoBean" scope="prototype"
        class="com.blahblah.ProtoBean" />

<bean id="singletonBean"
        class="com.blahblah.SingletonBean" />

public class ProtoBean {

    ....
}

public class SingletonBean {

    private BeanFactory factory;

    public ProtoBean dispense() {
        return (ProtoBean) factory.getBean("protoBean");
    }

    ....
}
Run Code Online (Sandbox Code Playgroud)

dfa*_*dfa 14

看看Method Injection

  • 正如克里斯托弗所说,这个答案已经过时了,从 Spring 3.0 开始,`&lt;aop:scoped-proxy/&gt;` 元素是正确的做法。此外,正如 shrini1000 所指出的,方法注入使类难以测试。 (2认同)

Chr*_*ang 10

从Spring 3.0开始,我们可以使用<aop:scoped-proxy>适当范围的依赖注入.在场景背后,Spring注入代理对象并负责查找正确的范围上下文,可能是原型,会话或请求等.请参阅此处的官方文档.

为了简化生活,Spring还为@Scope引入了proxyMode属性,因此我们不仅限于XML声明.例如:

@Scope(value = "prototype", proxyMode = ScopedProxyMode.INTERFACES)
Run Code Online (Sandbox Code Playgroud)

确保明确记录注入的bean是一个代理,以警告其他人getClass()和cast可能不会产生预期的结果.此外,请确保代理类中的equals()和hashCode()使用访问方法,而不是直接访问类变量.