Spring之Bean生命周期流程图
2023-05-16 15:43:26 0 举报
详细说明Spring中Bean的创建过程,完整的生命周期,通过流程图加批注的形式详细解读Bean生命周期。
作者其他创作
大纲/内容
执行BeanFactory的后置处理器
属性填充
初始化前
扫描就是在执行BeanFactory后置处理器的过程中进行的
加载bean的类
实例化后
推断构造方法:1、只有一个构造方法,不管有参还是无参,使用它创建对象;2、有多个构造方法,默认使用无参的构造方法(默认的意义);如果没有无参的构造方法,spring会报错。3、如果构造方法添加了@Autowired注解,会使用加了@Autowired注解的构造方法4、如果构造方法有参数,Spring会根据入参的类型和入参的名字去Spring中找Bean对象(以单例Bean为例,Spring会从单例池那个Map中去找): a.先根据入参类型找,如果只找到一个,那就直接用来作为入参 b.如果根据类型找到多个,则再根据入参名字来确定唯一一个 c.最终如果没有找到,则会报错,无法创建当前Bean对象
BeanDefinitionRegistryPostProcessor:执行postProcessBeanDefinitionRegistry()方法注册beanDefinition;BeanFactoryPostPocessor:执行postProcessBeanFactory()方法修改注册的beanDefinition; Spring的ConfigurationClassPostProcessor就是通过实现上面讲个接口,扫描@Bean、@Component....或者xml配置等符合Spring读取对着的类解析成 BeanDefinition
实例化前
@Transactional注解的方法被调用时,要判断到底是不是直接被代理对象调用的,如果是则事务会生效,如果不是则失效。
AOP
Aware回调
启动ApplicationContext
实例化
生成BeanDefinition
Spring会判断对象中是否存在被@Autowired注解的属性,Spring会把这些属性找出来,并由Spring进行赋值
依赖注入
Spring如何判断Bean对象需不需要进行aop:1、找出所有的切面bean2、遍历每个方法,看是否有@Before、@After等注解3、如果有,判断所对应的pointcut是否和当前bean对象的类型一致4、如果一致,表示当前bean对象有匹配的pointcut,表示需要进行aop
创建BeanFactory
初始化
推断构造
处理@Autowired、@Resource、@Value等注解,通过InstantiationAwareBeanPostProcessor.postProcessProperties()扩展点来实现
扫描
Spring判断对象是否实现了initializingBean接口,如果实现了,就表示当前对象必须实现接口中的afterPropertiesSet()方法,那Spring就会调用当前对象中的afterPropertiesSet()方法
初始化后
Bean的生命周期
Spring事务
BeanDifinition后置处理器
初始化BeanFactory
合并BeanDefinition
0 条评论
回复 删除
下一页