【Spring原理分析-Bean生命周期+Spring原理分析-Bean后处理器】

时间:2023-04-04 19:59:13

Spring原理分析-Bean生命周期

一、Bean生命周期
1、Bean生命周期测试
2、生命周期顺序


  • 二、自定义BeanPostProcessor实现增强


  • 三、模板方法-设计模式


一、Bean生命周期

1、Bean生命周期测试

  • ① 编写LifeCycleBean类

【Spring原理分析-Bean生命周期+Spring原理分析-Bean后处理器】

  • ② 编写启动类

【Spring原理分析-Bean生命周期+Spring原理分析-Bean后处理器】

  • ③ 测试

【Spring原理分析-Bean生命周期+Spring原理分析-Bean后处理器】


2、生命周期顺序

执行顺序:构造方法 → @Autowired → @PostConstruct → @PreDestroy

二、自定义BeanPostProcessor实现增强

  • ① 实现InstantiationAwareBeanPostProcessor与DestructionAwareBeanPostProcessor接口

Ⅰ postProcessBeforeDestruction:销毁前执行,如@PreDestroy;

Ⅱ postProcessBeforeInstantiation:实例化前执行,返回的对象会替换原本的bean;

Ⅲ postProcessAfterInstantiation:实例化后执行,返回的对象会替换原本的bean;

Ⅳ postProcessProperties:依赖注入阶段执行,如@Autowired、@Value、@Resource;

Ⅴ postProcessBeforeInitialization:初始化前执行,返回的对象会替换原本的bean,如@PostConstruct、@ConfigurationProperties;

Ⅵ postProcessAfterInitialization:初始化后执行,,返回的对象会替换原本的bean,如代理增强。

【Spring原理分析-Bean生命周期+Spring原理分析-Bean后处理器】

  • ② 测试

【Spring原理分析-Bean生命周期+Spring原理分析-Bean后处理器】


三、模板方法-设计模式

  • ① 编写测试类

【Spring原理分析-Bean生命周期+Spring原理分析-Bean后处理器】

【Spring原理分析-Bean生命周期+Spring原理分析-Bean后处理器】


  • ② 编写后置处理器接口

【Spring原理分析-Bean生命周期+Spring原理分析-Bean后处理器】

  • ③ 修改MyBeanFactory类

添加如下属性,及方法:

【Spring原理分析-Bean生命周期+Spring原理分析-Bean后处理器】

此时,由于模板方法还没有实现,所以直接测试并没有变化。

  • ④ 修改测试类main方法

通过匿名内部类形式实现接口中的方法,如下:

【Spring原理分析-Bean生命周期+Spring原理分析-Bean后处理器】

【Spring原理分析-Bean生命周期+Spring原理分析-Bean后处理器】


四、结尾

以上即为Spring原理分析-容器&Bean(二)的全部内容



》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

接下来讲解:

Spring原理分析-Bean后处理器

  • 一、Bean后处理器
    1、基础准备

    2、AutowiredAnnotationBeanPostProcessor后处理器

   3、CommonAnnotationBeanPostProcessor后处理器

  4、ConfigurationPropertiesBindingPostProcessor后处理器

  5、总结

  • 二、深入AutowiredAnnotationBeanPostProcessor后处理器
    1、基础准备
    2、postProcessProperties方法
    3、按类型查找值
    4、按方法参数类型查找值

一、Bean后处理器

1、基础准备

  • ① 编写实体类

【Spring原理分析-Bean生命周期+Spring原理分析-Bean后处理器】

【Spring原理分析-Bean生命周期+Spring原理分析-Bean后处理器】

  • ② 编写测试类

【Spring原理分析-Bean生命周期+Spring原理分析-Bean后处理器】

  • ③ 测试

【Spring原理分析-Bean生命周期+Spring原理分析-Bean后处理器】


@Autowired、@Resource、@PostConstruct、@PreDestroy均为生效。

2、AutowiredAnnotationBeanPostProcessor后处理器

解析:@Autowired、@Value 注解,如下配置:

【Spring原理分析-Bean生命周期+Spring原理分析-Bean后处理器】

【Spring原理分析-Bean生命周期+Spring原理分析-Bean后处理器】


3、CommonAnnotationBeanPostProcessor后处理器

解析:@Resource、@PostConstruct、@PreDestroy 注解,如下配置:

【Spring原理分析-Bean生命周期+Spring原理分析-Bean后处理器】


【Spring原理分析-Bean生命周期+Spring原理分析-Bean后处理器】


由此也可以看出,先解析 @Resource,后解析 @Autowired 注解。

4、ConfigurationPropertiesBindingPostProcessor后处理器

解析:@ConfigurationProperties 注解,如下配置:

【Spring原理分析-Bean生命周期+Spring原理分析-Bean后处理器】

【Spring原理分析-Bean生命周期+Spring原理分析-Bean后处理器】


5、总结

  • AutowiredAnnotationBeanPostProcessor后处理器

解析@Autowired、@Value 注解;


  • CommonAnnotationBeanPostProcessor后处理器

解析@Resource、@PostConstruct、@PreDestroy 注解;


  • ConfigurationPropertiesBindingPostProcessor后处理器

解析@ConfigurationProperties 注解。


二、深入AutowiredAnnotationBeanPostProcessor后处理器

1、基础准备

编写测试类,如下:

【Spring原理分析-Bean生命周期+Spring原理分析-Bean后处理器】

2、postProcessProperties方法

【Spring原理分析-Bean生命周期+Spring原理分析-Bean后处理器】

【Spring原理分析-Bean生命周期+Spring原理分析-Bean后处理器】


AutowiredAnnotationBeanPostProcessor#postProcessProperties方法源码,如下:

【Spring原理分析-Bean生命周期+Spring原理分析-Bean后处理器】

findAutowiringMetadata方法,如下:

【Spring原理分析-Bean生命周期+Spring原理分析-Bean后处理器】

【Spring原理分析-Bean生命周期+Spring原理分析-Bean后处理器】


【Spring原理分析-Bean生命周期+Spring原理分析-Bean后处理器】


inject方法,如下:

【Spring原理分析-Bean生命周期+Spring原理分析-Bean后处理器】

【Spring原理分析-Bean生命周期+Spring原理分析-Bean后处理器】


补充:${} 的解析器

【Spring原理分析-Bean生命周期+Spring原理分析-Bean后处理器】

【Spring原理分析-Bean生命周期+Spring原理分析-Bean后处理器】


3、按类型查找值

【Spring原理分析-Bean生命周期+Spring原理分析-Bean后处理器】

【Spring原理分析-Bean生命周期+Spring原理分析-Bean后处理器】


4、按方法参数类型查找值

【Spring原理分析-Bean生命周期+Spring原理分析-Bean后处理器】

【Spring原理分析-Bean生命周期+Spring原理分析-Bean后处理器】

【Spring原理分析-Bean生命周期+Spring原理分析-Bean后处理器】

【Spring原理分析-Bean生命周期+Spring原理分析-Bean后处理器】


三、结尾

以上即为Spring原理分析-容器&Bean(三)全部内容,感谢阅读