1. ¿Qué puede hacer la primavera?
El objetivo principal de Spring es hacer que J2EE sea fácil de usar y promover buenos hábitos de programación.
El núcleo de diseño del resorte de contenedor de control invertido es el paquete de beans org.springframework. Beans, diseñado para trabajar con Javabeans. Este paquete generalmente no es utilizado directamente por los usuarios, pero sirve como base para más servicios funcionales. La siguiente abstracción de nivel superior es "Bean Factory". Spring Bean Factory es una fábrica normal que permite que los objetos se recuperen por nombre y gestionan las relaciones entre los objetos. Las fábricas de frijoles admiten dos patrones de objetos :. Singleton: En este patrón, hay una instancia de objeto compartido con un nombre específico, que se recupera al mirar hacia arriba. Este es el valor predeterminado y se usa más comúnmente. Es un patrón ideal para objetos sin estado. .Prototipo: en este modo, se creará un objeto separado cada vez que se obtenga la búsqueda.
2. Método de carga e implementación de arranque de primavera
El primero: implementar operaciones antes de inicializar y destruir frijoles anotando los métodos @PostConstruct y @Predestroy
El segundo tipo: definir métodos init-métodos y métodos de destino en XML
El tercer tipo: Implementar las interfaces InicializingBean y DisposableBean a través de los frijoles
El cuarto tipo: escriba una clase para implementar la interfaz BeanPostProcessor. Esta interfaz tiene dos métodos.
(1): Método de posprocessbeforinitialización, llame a este método antes de que el frijol definido en primavera se inicialice antes de que el frijol se define en primavera
(2): Método de posprocesa de autorización, llame a este método o implementación después de que el bean definido en resorte se inicialice o inicialice.
InstantiationAwarebeanPostProcessor es una subinterfaz de BeanPostProcessor
Ejecutar después de cargar el contenedor de resorte
Del oyente de primavera como la entrada.
org.springframework.web.context.contextloaderListener
Encuentre el método para inicializar la primavera
/*** Inicializa el contexto de la aplicación web root. */ @Override public void contextInitialized (servletContextEvent Event) {initWebApplicationContext (event.getServletContext ()); }Ingrese el método initwebapplicationContext
if (this.context == null) {this.context = createwebapplicationContext (servletContext); } if (this.Context instanceOf ConfigurableWebApApplicationContext) {configurableWebApplicationContext cwac = (configurablewebApapPlicationContext) this.context; if (! cwac.Isactive ()) {// El contexto aún no se ha actualizado -> Proporcionar servicios como // Configurar el contexto principal, configurar la ID de contexto de la aplicación, etc. if (cwac.getParent () == null) {// La instancia de contexto se inyectó sin un padre explícito -> // determinar el contexto de la aplicación web para la red raíz, si corresponde. ApplicationContext Parent = LoadParentContext (servletContext); cwac.setParent (padre); } configurureEndRefreshWebApplicationContext (CWAC, ServletContext); }} ApplicationListener
1. Escribe una clase de oyente que implementa ApplicationListener.
importar org.springframework.context.applicationListener; import org.springframework.context.event.contextrefreshedevent; import org.springframework.stereotype.service; @ServicePublicPublicS startUpupLeNeMplements Application ApplicationSeNer <contenFreshedEvent> {@Service público OnApplicationEvent (ContextreFreshedEvent Event) {if (event.getApplicationContext (). getParent () == NULL) // El contexto de la aplicación raíz no tiene padres, él es el jefe. {// El código lógico que debe ejecutarse se ejecutará después de que se inicialice el contenedor de resorte. System.out.println ("/n/n/n/n/n/n/n/n/n/n cargado/n/n _________/n/n"); } // o el siguiente método if (event.getApplicationContext (). getDisplayName (). Equals ("Root WebApplicationContext")) {System.out.println ("/n/n/n ________/n/n/n/n cargado una vez/n/n _________/n/n"); }}}2. Establezca el paquete de escaneo de servicio en el archivo de configuración (applicationContext-Servlet.xml)
< Expression = "org.springframework.stereotype.service" /> < /context: component-scan>
3. Implemente el proyecto de inicio e imprima "Carga" después de cargar el resorte
Applicationontext y WebApplicationontext después de usar MVC llamará al método anterior dos veces. ¿Cómo distinguir entre estos dos contenedores?
Pero en este momento, habrá un problema. En el proyecto web (SpringMVC), habrá dos contenedores en el sistema, uno es el contexto de aplicación de raíz, y el otro es nuestro propio proyecto Name-ServletContext (como un subcontiner del contexto de aplicación de raíz).
En este caso, el método OnApplicationEvent se ejecutará dos veces. Para evitar los problemas mencionados anteriormente, solo podemos llamar al código lógico después de que se inicialice el contexto de aplicaciones raíz. Si se completa la inicialización de otros contenedores, no se realizará ningún procesamiento. Después de completar el código modificado, el código se modificará.
como sigue:
@Override public void onApplicationEvent (contextrefreshedevent evento) {if (event.getApplicationContext (). GetParent () == NULL) {// Contexto de la aplicación raíz No hay padre, es el jefe. // El código lógico que debe ejecutarse se ejecutará cuando se inicialice el contenedor de resorte. }}El orden de inicialización es:
Constructor> @PostConstruct> InitializingBean> Inic-Method
Resumir
Lo anterior trata sobre el análisis inicial del marco de primavera en este artículo, espero que sea útil para todos. Si tiene alguna pregunta, puede dejar un mensaje en cualquier momento y el editor responderá a todos a tiempo. ¡Gracias amigos por su apoyo para este sitio!