Spring bean到底是如何创建的?(下)(一)

pivoteic
发布于 2022-6-15 17:13
浏览
0收藏

 

本文是接着上篇文章   Spring bean到底是如何创建的?(上) 来继续讲述spring bean的其它的生命周期。

 

前文回顾:

 

上篇文章最开始我简单介绍了spring ioc和aop的概念,随后讲述了spring bean创建源码分析的一部分,包括bean元信息、不同作用域bean的创建方式、bean的后置处理器BeanPostProcessor组件体系、三级缓存解决循环依赖的问题、bean 的实例化阶段的源码。接下来这篇会继续从源码的角度来分析bean生命周期的其它阶段,包括 bean属性赋值阶段、Aware接口回调阶段、bean初始化阶段、bean的销毁阶段的内容。

 

五、 Spring Bean属性赋值阶段

        1)赋值前阶段

        2)赋值阶段

六、 Aware接口回调阶段

七、 Spring Bean初始化阶段

        1)初始化之前阶段

        2)初始化阶段

        3)初始化之后阶段

八、Spring Bean销毁阶段

         1)DisposableBean的注册

         2)销毁前阶段

         3)销毁阶段

九、全文总结

十、思考题

 

五、 Spring Bean属性赋值阶段

 

1)属性赋值前阶段

 

这个阶段需要对bean的一些属性进行赋值。比如说@Autowired 、@Resource等注解都是在这个阶段生效的。

Spring bean到底是如何创建的?(下)(一)-鸿蒙开发者社区

PropertyValues:这个api是封装属性的。不知道大家记不记得,当用xml配置bean的时候是可以通过标签给属性赋值的,其实当spring对配置信息解析之后会封装在PropertyValues中。

Spring bean到底是如何创建的?(下)(一)-鸿蒙开发者社区

看看,这里其实有又是对BeanPostProcessor组件接口的回调。@Autowired 、@Resource 注解就是在这时生效的。

 

我给大家列举一下在这个阶段一些重要的实现类,大家有时间可以翻一下源码,自己阅读一下这些实现类的 postProcessProperties 方法,看看注解是怎么生效的。

 

AutowiredAnnotationBeanPostProcessor:处理@Autowired、@Value注解

CommonAnnotationBeanPostProcessor:这个类的功能比较多,主要是实现了 @PostConstruct 、@PreDestory 、 @Resource 注解的功能,当然是在不同的阶段生效的,只不过spring 都给他写在同一个类中了

 

除了spring的实现,你还可以自己实现postProcessProperties ,因为你看这个方法的返回值是 PropertyValues ,属性的封装,所以可以在方法实现的时候往 PropertyValues 添加一些数据,这样就给属性赋值的时候就按照你设置的属性来赋值了。

 

2)属性赋值阶段

 

继续往下走

Spring bean到底是如何创建的?(下)(一)-鸿蒙开发者社区

这里会给属性赋值,所谓的赋值其实很简单,就是从 PropertyValues  拿出配置的属性以及对应的属性的值,然后设置到属性中其实就行了。只不过这里可能涉及到一些类型的转换和占位符的解析,还有一些其它的特性,这里就不详细展开讲了。

 

文章转自公众号:三友的java日记

标签
已于2022-6-15 17:13:16修改
收藏
回复
举报
回复
    相关推荐