Programmatically set a specific bean object - Spring DI
dependency-injection, java, spring
Solution
you can use this context:
GenericApplicationContext mockContext = new GenericApplicationContext();
which has a
mockContext.getBeanFactory().registerSingleton("name", reference);
and plug it in the real context
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
new String[] { "real-context.xml" }, mockContext);
and the classes are:
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.GenericApplicationContext;
Problem
In my program I need to programmatically configure an ApplicationContext. Specifically, I have a reference to an instance of MyClass and I want to define it as a new bean called "xxyy". ``` public void f(MyClass mc, ApplicationContext ac) { // define mc as the "xxyy" bean on ac ??? ... ... // Now retrieve that bean MyClass bean = (MyClass) ac.getBean("xxyy"); // It should be the exact same object as mc Assert.assertSame(mc, bean); } ``` The BeanDefinition API let's me specify the class of the new bean, so it does not work for me since I want to specify the instance. I managed to find a solution but it took two additional factory beans which seems like too much code for such an eartly purpose. Is there a standard API that addresses my needs?