Desde Servlet 3.0 es posible registrar instancias de Servlet programáticamente con javax.servlet.ServletContext#addServlet
. Esta clase también tiene un método createServlet
que analiza algunas anotaciones y realiza la inyección de dependencia. Me pregunto si necesito este método si no necesito el proceso de anotación. Me gustaría tener un servlet con un constructor habitual para establecer las dependencias necesarias a través de la inyección de dependencia.¿Inyección de dependencia del constructor con Servlet 3.0?
@Inject
public MyServlet(SomeDependency sd) { // Constructor
...
}
Preguntas:
- ¿Es posible construir una instancia de servlet "a mano", sin
createServlet
? (new MyServlet()
) - ¿Es posible utilizar el mecanismo de inyección de dependencias de un servidor Java EE para realizar la inyección del constructor? ¿Cómo hacerlo? ¿O se requiere un marco de DI separado como Guice?
Gracias, JSR-299 es lo que estoy buscando. La documentación de Weld dice: "Podemos obtener una instancia de TextTranslator inyectándola en un constructor, método o campo de un bean, o un campo o método de una clase de componente Java EE como un servlet". http://docs.jboss.org/weld/reference/1.0.0/en-US/html/intro.html Parece que la inyección del constructor no es posible con los servlets. – deamon
Tenga en cuenta que las primeras versiones de Weld eran bastante ... inútiles si no obtenía la configuración correcta al 100%. Esto puede haber mejorado desde entonces. –