SSM与SpringBoot

1 SpringBoot自动装配详解

SpringBoot启动类

@SpringBootApplication注解

SpringBoot启动类=>@SpringBootApplication

@EnableAutoConfiguration注解

SpringBoot启动类=>@SpringBootApplication=>@EnableAutoConfiguration

 通过@EnableAutoConfiguration注解实现自动装配

@SpringBootApplication=>@EnableAutoConfiguration=>@AutoConfigurationPackage

通过@AutoConfigurationPackage注解将添加该注解的类所在的package作为自动配置package进行管理

通过AutoConfigurationPackages工具类获取自动配置package列表,也就是说当SpringBoot应用启动时默认会将启动类所在的package作为自动配置的package

 

@EnableAutoConfiguration注解最重要的是AutoConfigurationImportSelector.class,将需要装配的类装配到IoC容器中

核心类分析

selectImport方法

 AutoConfigurationImportSelector中的selectImport方法是自动装配的核心实现,它主要是读取META-INF/spring.factories文件,经过去重、过滤,返回需要装配的配置类集合

selectImport方法=>getAutoConfigurationEntry方法

 getAttributes方法:获取@EnableAutoConfiguration中的exclude、excludeName等

 getCandidateConfigurations方法:获取所有自动装配的配置类,也就是读取spring.factories文件,后面会再次说明

 removeDuplicates方法:去除重复的配置项

 getExclusions方法:根据@EnableAutoConfiguration中的exclude、excludeName移除不需要的配置类

 fireAutoConfigurationImportEvents方法:广播事件

 最后根据多次过滤、判重返回配置类合集

 

getCandidateConfigurations方法

selectImport方法=>getAutoConfigurationEntry方法=>getCandidateConfigurations方法

 通过loadFactoryNames方法,扫描classpath下的META-INF/spring.factories文件,里面是以key=value形式存储,读取其中key=EnableAutoConfiguration

,value就是需要装配的配置类,也就是getCandidateConfigurations返回的值

 

总结: 

通过注解 @SpringBootApplication=>@EnableAutoConfiguration=>@Import({AutoConfigurationImportSelector.class})实现自动装配

AutoConfigurationImportSelector类中重写了ImportSelector中selectImports方法,批量返回需要装配的配置类

通过Spring提供的SpringFactoriesLoader机制,扫描classpath下的META-INF/spring.factories文件,读取需要自动装配的配置类

依据条件筛选的方式,把不符合的配置类移除掉,最终完成自动装配

 

 

 2

 3

 4

5

6

7

 8

9

BeanNameAware:实现该接口的Bean能够在初始化时知道自己在BeanFactory中对应的名字。

BeanFactoryAware:实现该接口的Bean能够在初始化时知道自己所在的BeanFactory的名字。

 

Spring中的bean的生命周期主要包含四个阶段:实例化Bean --> Bean属性填充 --> 初始化Bean -->销毁Bean

首先是实例化Bean,当客户向容器请求一个尚未初始化的bean时,或初始化bean的时候需要注入另一个尚末初始化的依赖时,容器就会调用doCreateBean()方法进行实例化,实际上就是通过反射的方式创建出一个bean对象

Bean实例创建出来后,接着就是给这个Bean对象进行属性填充,也就是注入这个Bean依赖的其它bean对象

属性填充完成后,进行初始化Bean操作,初始化阶段又可以分为几个步骤:

执行Aware接口的方法

Spring会检测该对象是否实现了xxxAware接口,通过Aware类型的接口,可以让我们拿到Spring容器的些资源。如实现
BeanNameAware接口可以获取到BeanName,实现BeanFactoryAware接口可以获取到工厂对象BeanFactory等

执行BeanPostProcessor的前置处理方法postProcessBeforelnitialization(),对Bean进行一些自定义的前置处理

判断Bean是否实现了InitializingBean接口,如果实现了,将会执行lnitializingBean的afeterPropertiesSet()初始化方法;

执行用户自定义的初始化方法,如init-method等;

执行BeanPostProcessor的后置处理方法postProcessAfterinitialization()

初始化完成后,Bean就成功创建了,之后就可以使用这个Bean, 当Bean不再需要时,会进行销毁操作,

首先判断Bean是否实现了DestructionAwareBeanPostProcessor接口,如果实现了,则会执行DestructionAwareBeanPostProcessor后置处理器的销毁回调方法
其次会判断Bean是否实现了DisposableBean接口,如果实现了将会调用其实现的destroy()方法
最后判断这个Bean是否配置了dlestroy-method等自定义的销毁方法,如果有的话,则会自动调用其配置的销毁方法

10.

 10 SpringMVC九大组件

11

 12

13

 14

 15

 

 5

 6

 7

 

posted @ 2023-07-26 19:32  剑阁丶神灯  阅读(8)  评论(0编辑  收藏  举报