Premier problème : le scope prototype ne servira à rien dans ce cas, cela sera toujours la même instance car les 2 beans seront créées au démarrage de l'application context.
Un bean prototype différent est créé seulement via
ApplicationContext.getBean(PrototypeBean.class) ;
Maintenant il existe différentes façons de provoquer cet appel si vous ne voulez pas le faire explicitement dans votre code (ce qui implique d'injecter l'application context):
- en Spring 5 vous avez par exemple @Lookup
- via l'API javax.inject et @Autowired Provider<PrototypeBean> provider; (un provider.get() retournera une nouvelle instance à chaque fois)
- via un ObjectFactory et @Autowired ObjectFactory<PrototypeBean> factory; (factory.getObject(); retournera une nouvelle instance à chaque fois)
Pour le @Value non injecté, cela peut être un problème de configuration de votre PropertySourcesPlaceholderConfigurer ou de vos property sources dans l'application context de la partie Web
(est-ce que le @Value qui fonctionne dans un singleton est aussi un singleton du même contexte ? votre prototype est dans l'application context de la servlet...)
Partager