Jen*_*der 5 java aop spring factory
我有一个单独的Spring bean(并且它必须保持单个),每次执行某个方法时,它需要另一个bean的新实例(让它称之为X).
到目前为止,我看了以下方法:
只需使用new创建X. 这工作了一段时间,但现在我们需要X的Spring AOP功能,所以这不再起作用了,因为生成的实例不是Spring管理的.
我认为FactoryBean是一个依赖项,但我只从FactoryBean获得一个X实例,它不符合我的第一个实例.
当前的计划是在Spring上下文中手动查找X,并在那里使用原型依赖项声明它.这应该有效,但我认为这真的很难看.
=>如何在我的bean中注入一个工厂,以便我可以在任何时候调用它的工厂方法,并从中获取一个spring托管实例.
Oli*_*ohm 12
像这样的场景的选择方法称为查找方法注入.简而言之,这使用了对bean方法的调用方法,从而导致创建了一个新的bean实例.您首先要创建一个带有抽象方法的类,该方法最终将提供依赖项实例:
abstract class MyClient implements Client {
void businessMethod(…) {
Dependency dependency = getDependencyInstance();
…
}
abstract Dependency getDependencyInstance();
}
Run Code Online (Sandbox Code Playgroud)
您现在继续为依赖项配置原型bean定义:
<bean id="dependency" class="….DependencyImpl" scope="prototype" />
Run Code Online (Sandbox Code Playgroud)
以及使用该lookup-method元素的客户端总是为每个方法调用获取一个新的依赖实例:
<bean class="….MyClient">
<lookup-method name="getDependencyInstance" bean="dependency" />
</bean>
Run Code Online (Sandbox Code Playgroud)
这将导致为一个CGLib代理创建,MyClient并且该方法声明getDependencyInstance(…)由a支持,TargetSource并引用BeanFactory要查找的bean和名称.在每次方法调用时,将触发bean查找并返回原型配置bean的新实例.
| 归档时间: |
|
| 查看次数: |
2445 次 |
| 最近记录: |