Red de conocimiento informático - Material del sitio web - Cómo utilizar el autowire de Spring para inyectar beans en servlets

Cómo utilizar el autowire de Spring para inyectar beans en servlets

En las aplicaciones JavaPojo normales, son administradas por Spring, por lo que el uso de anotaciones de autowire para la inyección no causará problemas, pero hay dos excepciones, una es Filter y la otra es Servlet, ambas administradas por Spring. y administrado, por lo que si desea utilizar Autowire para inyectarlo como otros beans, necesita hacer un poco de trabajo adicional. Entonces, si desea utilizar Autowire para inyectar el mismo contenido que otros beans, necesita hacer un poco de trabajo adicional.

Para los filtros, Spring proporciona DelegatingFilterProxy, por lo que este artículo se centrará en la solución Servlet.

1. Un método más intuitivo pero menos elegante es anular el método init(), que utiliza AutowireCapableBeanFactory para decirle manualmente a Spring: necesito que este Servlet sea un Bean. El método de escritura específico es:

public void init(ServletConfig servletConfig) throws ServletException {

ServletContext servletContext = servletConfig.getServletContext();

WebApplicationContext webApplicationContext = WebApplicationContextUtils .getWebApplicationContext (servletContext);

AutowireCapableBeanFactory autowireCapableBeanFactory = webApplicationContext.getAutowireCapableBeanFactory()

autowireCapableBeanFactory.configureBean(this, BEAN_NAME);

Donde BEAN_NAME es el nombre del Bean que debe inyectarse y registrarse en Spring.

El principal problema al escribirlo de esta manera es BEAN_NAME, es un poco como una búsqueda activa, no una inyección de dependencia.

2. Cree un proxy similar a DelegatingFilterProxy y utilícelo para encontrar el servlet real de acuerdo con la configuración para completar la función de lógica empresarial.

Supongamos que tenemos un Servlet llamado UserServlet, necesitamos inyectar un UserManager, el pseudocódigo es el siguiente:

public class UserServlet extends HttpServlet {

@ Autowired (requerido = verdadero)

UserManager privado userManager;

}

Paso uno:

la clase pública DelegatingServletProxy extiende GenericServlet {

targetBean de cadena privada;

proxy de servlet privado

@Override

servicio público nulo (ServletRequest req, ServletResponse res) lanza ServletException, IOException {

proxy.service(req, res

}

@Override

public void init() lanza ServletException {< / p>

this.targetBean = getServletName();

getServletBean();

proxy.init(getServletConfig()); / p>

private void getServletBean() {

WebApplicationContext wac = WebApplicationContextUtils.getBean(targetBean

}

}

<); p > Paso 2:

Configurar el archivo web.xml, que es más o menos lo mismo que UserServlet:

lt;servletgt;

lt;servlet-namegt ;userServletlt ;/servlet-namegt;

lt;servlet-classgt;com.sample.UserServletlt;/servlet-namegt;

lt;servlet-classgt;com.sample.UserServletlt ;/ nombre-servlet;