弹簧原型豆与单例豆和依赖注入相结合。是否有仅配置的方法?

2022-09-01 23:25:23

我有一个单例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");
    }

    ....
}

答案 1

看看方法注射


答案 2

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

为了让生活更轻松,Spring还为@Scope引入了 proxyMode 属性,因此我们不仅限于 XML 声明。例如:

@Scope(value = "prototype", proxyMode = ScopedProxyMode.INTERFACES)

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


推荐