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 条评论
 下一页
  
   
   
   
   
  
  
  
  
  
  
  
  
 