| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> Spring中自定义Bean行为InitalizingBean和DisposableBean -> 正文阅读 |
|
[Java知识库]Spring中自定义Bean行为InitalizingBean和DisposableBean |
写在之前 ???????? 最近没事在浏览Spring官网,简单写一些相关的笔记,这篇文章整理Spring自定义Bean。并不包所有技术点,只是记录有收获的内容,例如从背景知识了解到SpringFramework5.1开始,Spring需要JDK8+,并为JDK11LTS提供开箱即用的支持 Spring框架提供了许多接口,可以用来定制bean的性质 1.自定义Bean行为从Spring2.5开始,您有三种控制bean生命周期行为的选项:
1.1Bean初始化回调? ? ? ? Spring的 InitalizingBean接口允许bean在容器设置了bean的所有必要属性后执行执行初始化工作,InitalizingBean接口仅有一个afterPropertiesSet方法,在Spring初始化后,执行完所有属性设置方法(setXxx)后将调用afterPropertiesSet
例如 ExampleBean继承了接口InitalizingBean,并可在afterPropertiesSet方法中自定义一些特殊处理,XML中并不需要做特殊配置
? ? ? ? Spring虽然可以通过InitializingBean完成一个bean初始化后对这个bean的回调,但是这种方式要求bean实现Spring提供的 InitializingBean接口。这个bean的代码就和Spring耦合到一起了。通常情况下不鼓励bean直接实现InitializingBean,可以使用Spring提供的init-method的功能来执行一个bean 子定义的初始化方法。
Spring 可以通过注解@PostConstruct来声明初始化方法,@PostConstruct只能修饰一个非惊呆他的void方法
注意: 如果InitializingBean和init-method可以一起使用,Spring会先处理InitializingBean再处理init-method。 1.2Bean销毁回调Spring的 DisposableBean接口允许bean在容器中销毁时回调,DisposableBean接口仅有一个destory方法,该方法在BeanFactory在销毁单例时调用,此接口的异常只会被记录在日志中不会抛出,保证其他bean可以释放它们的资源
和?InitializingBean相似, 并不建议使用继承DisposableBean接口实现销毁时的自定义操作。 因为它会将Bean的代码和Spring代码耦合在一起,建议使用destroy-method属性,例如
?Spring 可以通过注解@PreDestroy来声明销毁方法,@PreDestroy只能修饰一个非惊呆他的void方法
这样,destroy-method和@PreDestroy不会将Bean代码和Spring代码耦合在一起 1.3默认初始化和销毁方法初始化和销毁方法回调时,您通常使用init()、initialize()、dispose()等名称编写方法。一般情况下方法的名称在整个项目中都是标准化的,开发人员使用相同的方法名称并确保一致性。这样就可以设置默认的初始化或者销毁方法
?配置顶层<beans>元素属性上存在默认的init-method属性,Spring IoC容器将bean类上名为init的方法识别为初始化方法回调。在创建和组装bean时,如果bean类有这样的方法,则会在适当的时候调用它
bean类已经具有与约定不同的回调方法,则可以通过使用<bean>本身的init-method="init"方法来覆盖默认方法 2.执行顺序如果为一个bean配置了多个生命周期机制,并且每个机制都配置了不同的方法名,那么每个配置的方法都会按照本说明后面列出的顺序运行 2.1初始化Bean方法先后顺序?
2.2销毁Bean方法先后顺序
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年3日历 | -2025/3/10 18:44:01- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |