我有一个单例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
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()使用访问方法,而不是直接访问类变量.
归档时间: |
|
查看次数: |
29476 次 |
最近记录: |