Rol de anotación universal de Spring con interfaz común y posprocesador
A partir de Spring 2.5, el desarrollo impulsado por anotaciones de Spring ha reemplazado lentamente la función del archivo de configuración xml de Spring, y el desarrollo SpringBoot actualmente popular también se basa en el controlador de anotaciones de Spring para la expansión, por lo que desea comprender bien Para SpringBoot, debe dominar algunos controladores de anotaciones de Spring.
Anteriormente usaba xml
Ahora uso anotaciones de primavera
Después del registro de ComponentScan en java8, se agrega @Repeatable(ComponentScans.class), puede marcar directamente múltiples @Componentscan en la clase configurada Para configurar múltiples escaneos @Componentscan antes de java8, necesita usar @ComponentScans
Varias formas de registrar componentes (beans) con el contenedor
1. Anotaciones de componentes de escaneo de paquetes (@Service, @Controller, @Repository, @Componet), este método se usa para importar sus propias clases
2. Importar en el método @Bean, a menudo usado para importar terceros El valor predeterminado El ID del bean de las clases en el paquete es el nombre del método de ejecución importado
3. Importe usando @Import (hay tres usos), el ID del bean predeterminado es el nombre de toda la clase
4. p> 4. A través de FactoryBean (factory Bean)
-bean Creation-gt; inicialización-gt; destrucción
ApplicationContextAeare y EmbeddedValueResolverAeare se importan a través de ApplicationContextAwareProcessor. postprocesador
Se llama a BeanFactoryPostProcessor después de cargar la información de definición de Bean
Se llama a BeanDefinitionRegistryPostProcessor cuando la información de definición de Bean está a punto de cargarse
Primero ejecute la clase de implementación de BeanDefinitionRegistryPostProcessor y luego ejecute la clase de implementación de BeanFactoryPostProcessor
Ubicación de origen de la creación del Bean
org.springframework.context.support.AbstractApplicationContext#finishBeanFactoryInitialization
- gt; org.springframework.beans.factory.BeanFactory#getBean (java.lang.String, java.lang.Classlt; Tgt;)
--gt; org.AbstractAutowireCapableBeanFactory#doCreateBean
Realizar creación de instancias del objeto Bean
-gt; org.springframework.beans.factory.support.AbstractBeanFactory#createBean
Asignar valores a las propiedades del Bean
org.springframework.beans.factory.support.#populateBean
El método Bean de inicialización realiza principalmente tres operaciones: 1. Recorrer los métodos de preprocesador del posprocesador (applyBeanPostProcessorsBeforeInitialization), 2. Luego ejecutar el método de inicialización (invokeInitMethods), 3.
Luego ejecute el método de posprocesamiento del posprocesador (applyBeanPostProcessorsAfterInitialization)
El método org.springframework.beans.factory.support.InitializeBean realiza tres operaciones principales: 1.
org.springframework beans.factory.support.AbstractAutowireCapableBeanFactory#initializeBean(java.lang.String, java.lang.Object, org.springframework.beans.factory.support.RootBeanDefinition.RootBeanDefinition)
.