首页 理论教育 Java服务端Bean生命周期

Java服务端Bean生命周期

时间:2023-11-22 理论教育 版权反馈
【摘要】:通过前面几节,基本了解了Spring的bean的使用、注入以及配置作用域。本节讲解Spring的Bean的装配和关闭的过程。3)如果实现了BeanNameAware接口,调用setBeanName设置Bean的ID或者Name。下面重点讲解初始化回调函数和销毁回调函数,它们常用于Bean的初始化和销毁时进行业务处理操作。销毁回调函数,有两种实现方式:1)实现org.springframework.beans.factory.DisposableBean接口。它将确保正常关闭Bean,并且调用destroy方法。通过上面的例子,将方法关联到Bean的生命周期,以便在恰当的生命周期中实现业务逻辑。

Java服务端Bean生命周期

通过前面几节,基本了解了Spring的bean的使用、注入以及配置作用域。那么Spring是怎么实例化Bean的呢?被容器管理的Bean什么时候创建,以及什么时候释放呢?本节讲解Spring的Bean的装配和关闭的过程。

Spring装配Bean的过程如下:

1)实例化Bean。

2)设置属性值。

3)如果实现了BeanNameAware接口,调用setBeanName设置Bean的ID或者Name。

4)如果实现了BeanFactoryAware接口,调用setBeanFactory设置BeanFactory。

5)如果实现了ApplicationContextAware接口,调用setApplicationContext设置Application-Context。

6)调用BeanPostProcessor的预先初始化方法。

7)调用InitializingBean的afterPropertiesSet()方法。

8)调用定制init-method方法。

9)调用BeanPostProcessor的后初始化方法。

Spring销毁Bean的过程如下:

1)调用DisposableBean的destroy()。

2)调用定制的destroy-method方法。

下面重点讲解初始化回调函数和销毁回调函数,它们常用于Bean的初始化和销毁时进行业务处理操作。

(1)初始化回调函数,有两种实现方式:

1)通过实现org.springframework.beans.factory.InitializingBean接口。

使用之前的Product类进行演示,将此类复制一份,然后实现InitializingBean接口,具体 如下:

在Spring配置文件中配置bean标签,具体如下:

编写测试代码如下:

运行结果如下:

execute afterPropertiesSet()

execute one

execute two

观察运行结果可以发现,实现InitializingBean接口的类仅仅在初始化的时候调用一次接口方法,由于此bean标签配置的是单例模式,所以之后再次使用getBean方法时接口方法没有被调用。

2)在配置文件中使用init-method属性指定无参数方法

使用之前的Product类进行演示,将此类复制一份,定义一个方法initMethod,当然方法名可以随便定义,具体如下:

之后在XML文件的bean标签中定义init-method属性,属性值为上面定义的initMethod方法的名称。具体如下:(www.xing528.com)

编写测试代码如下:

运行结果如下:

execute initMethod()

execute one

execute two

观察运行结果可以发现initMethod方法仅仅在初始化的时候调用一次,由于此bean标签配置的是单例模式,所以之后再次使用getBean方法时initMethod方法没有被调用。

(2)销毁回调函数,有两种实现方式:

1)实现org.springframework.beans.factory.DisposableBean接口。

使用之前的Product类进行演示,将此类复制一份,然后实现DisposableBean接口,具体如下:

在Spring配置文件中配置bean标签,具体如下:

为了能监听到销毁回调函数,需要在AbstractApplicationContext[7]类中调用关闭hook的registerShutdownHook()方法。它将确保正常关闭Bean,并且调用destroy方法。编写测试代码如下:

运行结果如下:

execute one

execute two

execute destroy()

观察控制台输出内容,当对象被销毁时会调用DisposableBean接口的destroy()方法。

2)在配置文件中使用destroy-method属性来指定无参数方法。

使用之前的Product类进行演示,将此类复制一份,定义一个方法destroyMethod,具体如下:

在XML配置中指定bean标签destroy-method属性对应类中的方法名称:

编写测试代码如下:

public class TestIocCaseLifeCircleWithDestroyMethod{

运行结果如下:

execute one

execute two

execute destroyMethod()

这里注册了registerShutdownHook()方法,在Bean销毁的时候,会执行对应配置的销毁 方法。

通过上面的例子,将方法关联到Bean的生命周期,以便在恰当的生命周期中实现业务逻辑。例如在容器初始化时预加载缓存,或者销毁时进行日志统计等。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈