I am trying to inject a prototype bean in a singleton bean such that every new call to a singleton bean method has a new instance of the prototype
From Spring documentation:
You do not need to use the
in conjunction with beans that are scoped as singletons or prototypes. If you try to create a scoped proxy for a singleton bean, the BeanCreationException is raised.
It seems the documentation has changed a bit for version 3.2 documentation where you can find this sentence:
You do not need to use the
in conjunction with beans that are scoped as singletons or prototypes.
It seems that its not expected you use a proxied prototype bean, as each time it is requested to the BeanFactory it will create a new instance of it.
In order to have a kind of factory for your prototype bean you could use an ObjectFactory as follows:
@Component
public class SingletonBean {
@Autowired
private ObjectFactory prototypeFactory;
public void doSomething() {
PrototypeBean prototypeBean = prototypeFactory.getObject();
prototypeBean.setX(1);
prototypeBean.display();
}
}
and your prototype bean would be declared as follows:
@Component
@Scope(value="prototype")
public class PrototypeBean {
// ...
}