多语言展示
当前在线:1231今日阅读:168今日分享:49

Spring容器控制bean实例化的方式:生命周期回调

Spring容器控制bean实例化的另外一种方式是生命周期回调,bean的生命周期为创建和销毁,即在实例化的时候调用某个方法或者销毁时调用某个方法。具体是如何实现的,以下做简单说明。
工具/原料
1

java

2

jdk1.8,spring4.3.18,Junit5.0,Intellij IDEA

方法/步骤
1

首先创建一个名为BeanControl的类,在其中加入init和destroy方法,模拟bean实例化时调用init,销毁时调用destory。在方法中只需要简单的输出初始化javaBean以及销毁javaBean。再加入无参构造器,以判断bean实例化。

2

在applicationContext.xml中声明bean,id为beanControl,class为其访问路径,为方便输出比对,作用域设置为prototype,添加属性init-method为init,初始化方法为init()方法。

3

创建测试方法,获取spring容器后,直接通过容器获取BeanControl的实例。

4

利用junit进行测试,测试结果控制台输出如下,输出内容依次是构造器的输出,然后是init()方法的输出,证明是实例化的同时调用初始化方法。

5

由于bean对象会随着spring容器关闭而自动销毁,因此可以直接关闭Spring容器来模拟bean销毁。首先在applicationContext中bean声明中加入属性destroy-method属性,声明销毁调用方法destroy,由于此属性只对单例生效,因此将作用域scope换成singleton。

6

然后在测试方法中添加关闭Spring容器的代码,如下

7

运行结果如下,在关闭容器时,输出了销毁javaBean的内容,证明此时回调了destroy方法。

8

生命周期的初始化及销毁也可以对所有的bean进行配置,只需要在Beans标签下配置default-init-method和default-destroy-method,按照配置bean的顺序,spring容器会搜素bean中的init方法和destroy方法作为全局的方法使用。

注意事项

在bean销毁时,scope是修改为singleton的原因是对于原型创建bean对象每次都是新的对象,因此销毁就没有监控意义了。

推荐信息