最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

世界通讯!Spring IOC官方文档学习笔记(六)之自定义bean的特性

来源:博客园


【资料图】

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...");    }}                //之后,启动容器,获取这个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...");    }}            //之后,启动并关闭容器,日志打印如下:preDestroy...DisposableBean...cleanup...

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

未完待续...

关键词: 配置文件 生命周期 不建议使用