Depuis Servlet 3.0, il est possible d'enregistrer des instances Servlet par programmation avec javax.servlet.ServletContext#addServlet
. Cette classe a également une méthode createServlet
qui analyse certaines annotations et effectue une injection de dépendances. Je me demande si j'ai besoin de cette méthode si je n'ai pas besoin du traitement d'annotation. Je voudrais avoir une servlet avec un constructeur habituel pour définir les dépendances requises via l'injection de dépendance.Injection de dépendances constructeur avec Servlet 3.0?
@Inject
public MyServlet(SomeDependency sd) { // Constructor
...
}
Questions:
- Est-il possible de construire une instance de servlet "à la main" sans
createServlet
? (new MyServlet()
) - Est-il possible d'utiliser le mécanisme d'injection de dépendance d'un serveur Java EE pour effectuer une injection de constructeur? Comment faire? Ou est-ce qu'un cadre DI séparé comme Guice est requis?
Merci, JSR-299 est ce que je cherche. La documentation de Weld indique: "Nous pouvons obtenir une instance de TextTranslator en l'injectant dans un constructeur, une méthode ou un champ d'un bean, ou un champ ou une méthode d'une classe de composant Java EE telle qu'une servlet." http://docs.jboss.org/weld/reference/1.0.0/fr-FR/html/intro.html Il semble que l'injection du constructeur n'est pas possible avec les servlets. – deamon
Notez que les premières versions de Weld étaient plutôt ... inutiles si vous n'aviez pas la configuration 100% correcte. Cela peut avoir amélioré depuis. –