Cuando trabajemos en un proyecto, utilizaremos un oyente para obtener archivos de configuración de Spring y luego eliminaremos los granos que necesitamos de él. Por ejemplo, para hacer la página de inicio del sitio web. Suponiendo que la lógica comercial de fondo del producto se realiza bien, necesitamos crear un oyente y consultar los datos de la página de inicio en el inicio del proyecto y ponerlo en la aplicación, es decir, el método de llamar a la lógica comercial del producto de fondo en el oyente, es decir, necesitamos obtener los granos correspondientes configurados en la primavera en la primavera. Crea el oyente primero:
1. Crea un initDatalistener
Crear un oyente InitDatalistener herede ServletContextListener:
/** * @Description: TODO (se usa para inicializar los datos cuando se inicia el proyecto) * @author eson_15 * */// @componente // El oyente es un componente de la capa web. Está instanciado por Tomcat, no instanciado por la primavera. No se puede poner en la clase pública primavera initDatalistener implementos servletContextListener {private Productservice Productservice = null; // Productservice Define la lógica comercial relacionada con el producto @Override public void contextDestroyed (ServletContextEvent Event) {} @Override public Void Contextinitialized (ServletContextEntextEvent) {{}}}}}}}}}}}}}}}}}}Y configure el oyente en Web.xml:
Como se mencionó anteriormente, alguna lógica comercial del producto se define en el servicio de productos, y este servicio de productos se entrega a la primavera para la gerencia. Entonces, ¿cómo obtenemos este objeto? Lo primero que debe estar seguro es: no podemos sacarlo por nosotros mismos, porque si sale, no tiene nada que ver con el COI de Spring ... hay tres formas principales de lograrlo. Lo analizamos uno por uno y finalmente comparamos las ventajas y desventajas.
2. Cargue el archivo frijoles.xml directamente
Este método es simple y crudo. ¿No necesita cargar el archivo de configuración? Ok, lo cargaré, como sigue:
//@componente // El oyente es un componente de la capa web. Está instanciado por Tomcat, no en la primavera. No se puede poner en la clase pública de primavera initDatalistener implementa servletContextListener {private Productservice Productservice = null; // ProductService define la lógica comercial relacionada con el producto @Override public void contextDestroyed (evento servletContextEvent) {} @Override public void contextInitialized (servletContextEvent Event) {// Obtener la clase Lógica de negocios de la clase de la clase de la clase de la clase de servicio de negocios. Productservice = (Productservice) context.getBean ("Productservice"); System.out.println (Productservice); // Salida para ver si lo obtiene // Las siguientes son las operaciones específicas relacionadas con el servicio de productos ...}}Este método está completamente bien y la idea es muy clara. Primero cargue el archivo de configuración frijoles.xml y luego obtenga el bean. Sin embargo, después de comenzar Tomcat, echemos un vistazo a la salida de información de la consola:
En este punto, debemos encontrar las desventajas de este método. Los archivos de configuración se cargaron dos veces, lo que significa que esos frijoles se instanciaron dos veces. A juzgar por la información impresa, obtuvimos los frijoles que cargamos los archivos de configuración nosotros mismos y fuimos instanciados. Este método es obviamente indeseable.
3. Obtenga ServletContext
Del método anterior, al menos podemos saber que Spring ha cargado el archivo de configuración una vez a través de su oyente. No necesitamos cargarlo nuevamente. Es fácil pensar que si sabemos dónde se ha cargado Spring, entonces podemos obtener el archivo de configuración desde allí. Echemos un vistazo al proceso de carga del archivo de configuración en la primavera:
En la figura anterior (se omite el código irrelevante), el contextloaderListener es el oyente Spring que configuramos en Web.xml. También implementa el ServletContextListener y hereda el contextador. En el oyente, el archivo de configuración se obtiene principalmente a través del método InitWebApplicationContext y crea un objeto WebApplicationContext. En el método InitWebApplicationContext, se hacen dos cosas principales: una es obtener el contexto de resorte, y el otro es poner el contexto de resorte en el ServletContext, y la clave es: WebApplicationContext.Root_Web_Application_Context_Attribute. Entonces, ¿cómo se obtiene el contexto de la primavera? Es para obtener la ruta de Spring configurada en Web.xml. Config_location_parm es en realidad una constante de cadena, que es el siguiente oyente de Spring configurado en Web.xml:
<cuette-param> <amamname> contextConfiglocation </amamname> <!-config_location_parm es contextConfigLocation-> <amam-value> classpath: beans.xml </amam-value> </ context-param>
Por lo tanto, es obvio que obtiene frijoles.xml a través de la ruta configurada en Web.xml, luego cargue este archivo de configuración e instancie el bean.
Ahora que sabemos que después de que Spring carga el archivo de configuración y lo coloca en el ServletContext, ¡podemos ir aquí y obtenerlo directamente!
//@componente // El oyente es un componente de la capa web. Está instanciado por Tomcat, no en la primavera. No se puede poner en la clase pública de primavera initDatalistener implementa servletContextListener {private Productservice Productservice = null; @Override public void contextDestroyed (evento de servletContextEvent) {// TODO Método Generado automático STUB} @Override public void contextInitialized (ServletContextEvent Event) {// Get Business Logic Class Información del producto // Solución 2: Cuando se inicia el proyecto, el archivo de configuración de primavera se carga a través del oyente de los primaveras y se almacena en el texo de Servletcontext. Solo necesitamos obtenerlo en ServletContext. ApplicationContext context = (ApplicationContext) event.getServletContext () .getAttribute (webApplicationContext.Root_web_application_Context_Attribute); Productservice = (Productservice) context.getBean ("Productservice"); System.out.println (Productservice); }} De esta manera, podemos obtener el objeto instanciado del servicio del productor. Este método es bueno, pero los parámetros en GetAttribute son demasiado largos. No sé si la frente del programador fue recortada en ese momento. Supongo que no podía pensar en otros nombres más adecuados ~
4. Cargando a través de la clase de herramientas proporcionada por Spring <Br /> Quizás los grandes que desarrollaron Spring también se dieron cuenta de que el nombre de este parámetro era demasiado largo, por lo que proporcionaron una clase de método que puede cargar el archivo de configuración:
clase pública initDatalistener implementa servletContextListener {private Productservice Productservice = null; @Override public void contextDestroyed (evento de servletContextEvent) {// TODO Método Generado automático} @Override public void contextInitialized (servletContextEvent event) {// Obtener información de la lógica de negocios de la información del producto de la lógica de negocios. Productservice = (Productservice) context.getBean ("Productservice"); System.out.println (Productservice); }} De hecho, el método GetWebApplicationContext aquí solo encapsula el método anterior. Veamos el código fuente de este método:
public static webapplicationContext getWebApplicationContext (servletContext sc) {return getWebApplicationContext (SC, WebApplicationContext.Root_Web_Aplication_Context_Attribute); }Esto es más conveniente para que los programadores llamen, eso es todo ... por lo que generalmente usamos el tercer método para obtener el archivo de configuración de Spring, obteniendo así el bean instanciado correspondiente.
Enlace original: http://blog.csdn.net/eson_15/article/details/51373937
Lo anterior es la solución al cloque de WeChat del iPhone 6SPlus. Espero que sea útil para todos. También espero que todos apoyen a Wulin.com y presten más atención a un contenido más emocionante en Wulin.com.