我有一个情况,我有一个bean(我们称之为A),它需要另一个bean(B)。
这个B是通过使用MethodInvokingFactoryBean类的静态方法检索到的。这个静态方法依赖于系统状态,并且在web应用程序加载后才能工作。
我只需要在运行时访问B(构造函数中没有交互)。如何配置A以自动装配bean B,并且只在A首次需要它时初始化?
在应用程序上下文中使用getBean是唯一的方法吗?
谢谢!
*编辑-添加了一些xmls :) *
这是bean B的定义。
这是Bean A的定义。
B的targetMethod只有在Web应用程序初始化后才能正常工作。我可以在A内部使用ApplicationContext.getBean("B"),但这不够优雅,并且在单元测试中会遇到问题,除非我执行以下操作(这也不是理想的解决方案):
这个B是通过使用MethodInvokingFactoryBean类的静态方法检索到的。这个静态方法依赖于系统状态,并且在web应用程序加载后才能工作。
我只需要在运行时访问B(构造函数中没有交互)。如何配置A以自动装配bean B,并且只在A首次需要它时初始化?
在应用程序上下文中使用getBean是唯一的方法吗?
谢谢!
*编辑-添加了一些xmls :) *
这是bean B的定义。
<bean id="api" class="com.foo.API"/>
<bean id="B" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean" lazy-init="true">
<property name="targetObject" ref="api"/>
<property name="targetMethod" value="getFactory"/>
<qualifier value="myQualifer"/>
</bean>
这是Bean A的定义。
<bean id="resources.someRESTResourceA" class="com.foo.MyRestResource"/>
我不能使用Autowire将B注入A,因为这会在A构造时初始化它(B)。B的targetMethod只有在Web应用程序初始化后才能正常工作。我可以在A内部使用ApplicationContext.getBean("B"),但这不够优雅,并且在单元测试中会遇到问题,除非我执行以下操作(这也不是理想的解决方案):
public BInterface getB() {
if (b == null) {
b = ApplicationContext.getBean("B");
}
return b;
}