大概每个人都在项目中使用了此注释,因为它将在应用程序启动时执行该注释标记的方法。实际上,它还具有另一个注释。在Bean被摧毁之前,它确实被执行。它们是豆类生命周期的所有部分。那么他们实施什么阶段?我们将从源代码的角度进行分析。
他是规格中定义的两个类。它表示豆初始化和破坏之前指定的注释,该注释位于包装下,而不是弹簧罐中的类。
JSR-2050的缩写,Java规范请求意味着Java规范提案。它是Java行业提出的重要标准。它定义了一组常见的注释,例如@postContruct, @resource等,以防止不同的J2EE组件等不同的J2EE组件例如Spring,Jboss,WebSphere等。每个都可以完成一组注释。
春季作为NB框架,也遵循上述规格,并意识到对JSR注释的支持。
豆初始化和破坏的方法定义了,包括接口的实现,bean配置,属性和添加注释。
代码地址:github.com/alvinlkk/sp
根据执行结果,豆的初始化和破坏的顺序:
通过调试快速跟踪真正的豆的初始化阶段。
在Bean的初始化过程之前,回调方法是弹簧的扩展点,我们通过这种扩展机制实现了我们。相应的类是。
顾名思义,它是用于处理初始化和破坏注释的Bean处理器。我们查看其方法。
该方法的关键是上面的两个步骤。第一步是找到所有注释的方法,第二步是执行相应的方法,第二步更简单,即调用反射操作。我们专注于第一种方法。
关键方法的源代码如下:
该方法主要遍历与Bean相对应的类,以及在父级中包含和注释的注释方法
目的。
有一个问题,寻找其实用性的属性,然后将其设置在它上?
我们可以查看父类的结构,该结构是立即设置的。
那么,该Bean处理器什么时候加载到容器中?只有将其加载到容器中后,才能执行相应的方法。
您可以阅读本文,以了解BeanPostProcessor Springboot扩展点的详细过程 - 一篇文章Master the BeanPostProcessor family
何时将此豆的定义添加到BeanDefinition工厂中?
只有当BeanDefinition工厂在工厂中,才会创建BEAN。答案才在方法中。
实际上,在BEAN初始化过程时,Bean初始化可以自定义扩展点,并且您可以根据实际需求进行扩展。
https://securitit.blog.csdn.net/article/details/111353318
https://blog.csdn.net/securitit/article/details/111353676
https://www.cnblogs.com/lay2017/p/11735802.html
原始:https://juejin.cn/post/7111258070352658446