我处理遗留代码库,其中未在春天有线了一类需要获得一类是在春季接线.我希望创建一个在启动时连接的工厂类,然后我可以调用getInstance()方法来获取有线对象.最好的方法是什么?
例:
public class LegacyA {
public void doSomething() {
...
Foo foo = FooFactory.getInstance();
...
}
}
public class FooFactory {
private static Foo foo;
public static Foo getInstance() {
if (foo == null) throw new IllegalStateException();
return foo;
}
}
Run Code Online (Sandbox Code Playgroud)
我需要在启动时连接FooFactory,以便LegacyA可以简单地调用getInstance(),以便它返回一个Foo实例(它也是在应用程序上下文中定义的bean).
<bean id="legacyA" class="LegacyA"/>
<bean id="foo" class="Foo"/>
<!-- I need this bean to be injected with foo so that the FooFactory can return a foo -->
<bean id="fooFactory" class="FooFactory"/>
Run Code Online (Sandbox Code Playgroud)
编辑:我不得不重新修改我的例子,因为我在自己的头脑中有点困惑...
ska*_*man 10
使用像这样的静态实际上违背了Spring IoC,但是如果你真的必须使用它们,那么我建议你写一个简单的Spring钩子,它接受Foo
并注入它FooFactory
,例如
public class FooFactoryProcessor implements InitializingBean {
private Foo foo;
public void setFoo(Foo foo) {
this.foo = foo;
}
public void afterPropertiesSet() throws Exception {
Foofactory.setFoo(foo);
}
}
Run Code Online (Sandbox Code Playgroud)
在您的XML中:
<bean id="foo" class="Foo"/>
<bean class="FooFactoryProcessor">
<property name="foo" ref="foo"/>
</bean>
Run Code Online (Sandbox Code Playgroud)
无需修改Foo
或FooFactory
归档时间: |
|
查看次数: |
26133 次 |
最近记录: |