Spring Wire a Static Class
java, spring
Solution
Using statics like this really goes against the grain of Spring IoC, but if you really have to use them, then I would suggest writing a simple Spring hook which takes the `Foo` and injects it into the `FooFactory`, e.g.
public class FooFactoryProcessor implements InitializingBean {
private Foo foo;
public void setFoo(Foo foo) {
this.foo = foo;
}
public void afterPropertiesSet() throws Exception {
Foofactory.setFoo(foo);
}
}
And in your XML:
<bean id="foo" class="Foo"/>
<bean class="FooFactoryProcessor">
<property name="foo" ref="foo"/>
</bean>
No need to modify `Foo` or `FooFactory`
Problem
I'm dealing with a legacy code base where a class which is not wired up in spring needs to obtain a class that is wired up in spring. I was hoping to create a factory class that was wired up on startup and then I could just call the getInstance() method to obtain a wired up object. What is the best way to go about this? Example: ``` 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; } } ``` I need FooFactory to be wired up on startup so that LegacyA can simply call getInstance() so that it returns an instance of Foo (which is also a bean defined in the application context). ``` <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"/> ``` Edit: I had to re-work my example a bit as I got it a bit confuzzled in my own head...