Cómo obtener Spring Bean en el servlet
En una aplicación web que utiliza el contenedor Spring, las dependencias entre objetos comerciales se pueden configurar utilizando el archivo spring-context.xml, y el contenedor Spring es responsable de crear los objetos dependientes. Si desea utilizar el contenedor Spring para administrar objetos comerciales en servlets, generalmente necesita usar WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext()) para obtener WebApplicationContext y luego llamar a WebApplicationContext.getBean("beanName") para obtener la referencia a objeto. En realidad, esto se utiliza. La búsqueda de dependencia se utiliza para obtener el objeto y el nombre del bean del objeto de la aplicación está codificado en el código del servlet.
De esta manera, es equivalente a cargar el Bean en el contenedor Spring en el contenedor de servlets, es decir, cargar el Bean en Spring en el Bean en web.xml.
Para poder percibir Spring Beans en servlets, puedes hacerlo mediante los siguientes pasos:
1- Definir el servlet como Bean en el spring-context.xml
2- Implemente el servlet proxy. El servlet usa WebApplicationContext para obtener el contexto de primavera.
3- En web.xml, use ContextLoaderListener en web.xml para inicializar el contexto Spring y defina el nombre del bean del servlet en spring-context.xml usando los parámetros de inicialización en la definición del servidor proxy.
4- Definir el mapeo del servidor proxy en web.xml.
Con este enfoque, puede utilizar Spring para gestionar las dependencias entre el servidor y los objetos comerciales sin tener que codificar los nombres de los objetos a los que se hará referencia en el servlet.
Código de muestra
web.xml
/WEB-INF/server-servlet.xml
/WEB-INF/server-bean.xml
contexto-param>
<;! --?Crear un contenedor Spring compartido por todos los Servlets y filtros-->
<;! --? Compartir con el contenedor anterior, cargar el contenedor Spring
Separe los beans que no están disponibles para el programa java local y los beans que están disponibles localmente en diferentes archivos de configuración para ejecutar el programa java local - ->
<;! --? ¿Iniciar InitialServlet, inicializar la aplicación y algunos objetos importantes? -->
/p>
<servlet-name>proxyServlet
server-servlet.xml
DelegatingServletProxy.javapublic?class?DelegatingServletProxy?extends?GenericServlet?{
privado?String?targetBean;
¿servlet?proxy privado;
@Override
servicio?void?público(ServletRequest?arg0,?ServletResponse?arg1)
lanza?ServletException,?IOException? {
proxy.service(arg0,?arg1);
}
@Override
public?void?init()? throws?
this.targetBean?=?getServletName();
getServletBean();
proxy.init(getServletConfig());
}.
privado?void?getServletBean()?{
WebApplicationContext?wac?=?WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());
this.(Servlet) wac.getBean(targetBean);//get?proxyBean
}
}
ProxyServlet.javapublic?HttpServlet{
¿privado? Logger?logger?=?LoggerFactory.getLogger(ProxyServlet.class);
@Autowired
privado?QueryService?queryService;
público?void?setQueryService( QueryService?queryService)
{
this.queryService?=? queryService;
}
privado?estático?final?largo? serialVersionUID?=?1L;
/** *?@see?HttpServlet#HttpServlet() */
public?ProxyServlet()?{
super ();
}
/** *?@see?HttpServlet#doGet(HttpServletRequest?request,?HttpServletResponse?response) */
¿protegido? void?doGet( HttpServletRequest?request,?HttpServletResponse?response)?throws?ServletException,?IOException?{
}
/** *?@see?HttpServlet#doPost(HttpServletRequest ?solicitud,?HttpServletResponse?response) */
protected?void?doPost( HttpServletRequest?request,?HttpServletResponse?response)?throws?ServletException,?IOException?{
// ?TODO?Método?generado automáticamente?stub
}
@Override
public?void?init(ServletConfig?config)?throws?