首页IT科技spring自定义配置类(Spring IOC官方文档学习笔记(六)之自定义bean的特性)

spring自定义配置类(Spring IOC官方文档学习笔记(六)之自定义bean的特性)

时间2025-09-08 21:43:08分类IT科技浏览5236
导读:1.生命周期回调...

1.生命周期回调

(1) 如果我们想要介入bean的生命周期             ,可通过实现spring中的InitializingBean和DisposableBean接口来达到这一目的                        ,spring会调用InitializingBean中的afterPropertiesSet()以及DisposableBean中的destroy()方法来执行bean在初始化和销毁时所需的行为       ,此外JSR-250中@PostConstruct和@PreDestroy注解也同样对spring bean适用         ,它们也可以指定bean的初始化或销毁方法                       ,且不与spring框架强耦合           ,同时如果不想使用JSR-250注解      ,也可通过配置bean中的init-method和destroy-method来指定初始化或销毁回调             。以上这些所有的回调都会由BeanPostProcessor来进行统一调用处理                      ,因此如果我们有些需求无法通过这些生命周期回调实现               ,那么可以考虑自定义BeanPostProcessor                        。

(2) 除了初始化   ,销毁回调外                     ,我们还可以实现Lifecycle接口                   ,来让bean参与到容器级别的生命周期,比如容器的启动或关闭等

(3) 初始化回调(Initialization Callbacks):用于指定在容器设置了bean的所有所需属性后                 ,应该执行的行为                       ,有3种方式   ,分别为实现InitializingBean接口             ,使用@PostConstruct注解或在xml文件中指定init-method属性                        ,如下所示

public class ExampleA implements InitializingBean { /** * InitializingBean接口提供的方法       ,不建议使用         ,因为它会与spring框架强耦合 */ @Override public void afterPropertiesSet() throws Exception { System.out.println("afterPropertiesSet..."); } @PostConstruct public void postConstruct() { System.out.println("postConstruct..."); } //将该方法于xml配置文件中指定 public void init() { System.out.println("init..."); } } <!-- xml配置文件 --> <beans ...> <!-- 注意:如果是基于xml的配置                       ,则要使@PostConstruct生效           ,则要开启注解扫描 --> <context:annotation-config /> <!-- 使用bean标签中的init-method属性来指定bean中的初始化回调 --> <bean id="exampleA" class="cn.example.spring.boke.ExampleA" init-method="init"></bean> </beans> //之后      ,启动容器                      ,获取这个bean               ,日志打印如下: postConstruct... afterPropertiesSet... init...

由上可见   ,初始化回调的执行顺序为:@PostConstruct注解所标注的方法 -> InitializingBean接口中的afterPropertiesSet()方法 -> init-method属性所指定的方法

(4) 销毁回调(Destruction Callbacks):用于容器在销毁bean之前                     ,应该执行的行为                   ,有3种方式,分别为实现DisposableBean接口                 ,使用@PreDestroy注解或在xml文件中指定destroy-method属性                       ,如下所示

public class ExampleA implements DisposableBean { /** * DisposableBean接口提供的方法   ,不建议使用             ,因为它会与spring框架强耦合 */ @Override public void destroy() throws Exception { System.out.println("DisposableBean..."); } @PreDestroy public void preDestroy() { System.out.println("preDestroy..."); } //将该方法于xml配置文件中指定 public void cleanup() { System.out.println("cleanup..."); } } <!-- xml配置文件 --> <beans ...> <context:annotation-config /> <!-- 使用bean标签中的destroy-method属性来指定bean中的初始化回调 --> <bean id="exampleA" class="cn.example.spring.boke.ExampleA" destroy-method="cleanup"></bean> </beans> //之后                        ,启动并关闭容器       ,日志打印如下: preDestroy... DisposableBean... cleanup...

由上可见         ,销毁回调的执行顺序为:@PreDestroy注解所标注的方法 -> DisposableBean接口中的destroy()方法 ->destroy-method属性所指定的方法                       ,与初始化回调的执行顺序是相似的

未完待续...

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
网站seo的优化怎么做的(网站seo的优化怎么做好)