玖叶教程网

前端编程开发入门

Bean的生命周期(即控制初始化和销毁前去做一些事情)

概念:所谓bean的生命周期其实指的就是bean从被创建后到被销毁之前这个阶段,而在这个阶段我们可以做一些事情。

一.控制Bean生命周期的两种方式

1)通过配置进行控制

先看起点程序:即创建了一个容器tcx,然后使用这个容器去获取bookDao对象,然后执行bookDao对象里的save()方法,最后使用close()关闭容器。

再看BookDaoImpl.java即BookDao接口的实现类,其里面常规定义了一个save()方法,然后,不是说bean的声明周期指的是创建之后到销毁之前这段时间吗?那么,可以用两个方法来在这段时间干一些事情,里面的init()方法指的是创建之后干的事情,具体来说指的是创建容器的时候干的事情(因为容器管理的是对象,创建容器的时候容器也要实例化对象),destory()只的是bean要被销毁的时候干的事情(即指的是虚拟机退出前要结束bean的时候干的事情)

但是要注意,这里还不够,不可能在实现类里写两个方法,然后在起点程序中又没有调用它门它门就会自动执行,所以还需要在配置文件中进行配置

可以在配置文件中看到,在配置bookDao这个bean的时候,通过init-method和destroy-method这两个方法指定了刚刚实现类里定义的初始化方法init和销毁时候的方法destory

此时就可以识别到了!!

运行起点程序得到输出

可以看到,给booDao实现类配置的初始化和销毁方法已经起作用了,起点程序不需要刻意去调用这两个方法它门也能执行,要注意的是执行顺序,初始化方法即Init()最先执行是因为在创建bean的时候即创建容器(过程中创建bean)的时候就执行了,然后是常规方法save()最后是销毁方法destory()方法

还要注意一点,起点程序的close()方法,它的作用是在关闭虚拟机之前手动关闭容器的即结束bean!!否则直接退出虚拟机了不会没有关闭bean就执行不了销毁方法,并且这个方法是ClassPathXmlApplicationContext类的对象有的,所以创建容器的时候用这个类型,关于关闭容器还有另一种方法即关闭钩子,它的位置可以任意放,在程序执行完退出虚拟机之前可以自动结束bean

运行结果可以看到同样可以执行销毁方法

这就是通过配置控制bean!!

2)通过接口控制bean

我们这次通过service来举例子,首先在BookServicelmpl中实现两个接口InitializingBean和DisposableBean并实现对应的方法

然后,看配置文件,在配置BookServiceImpl的bean的时候并没有配置init-method和destroy-

method这两个方法

然后运行起点程序,注意起点程序中依然只创建容器然后通过容器获取BookDao的对象并调用BookDao的对象里的save()方法,并没有获取BookService的方法,但是依然可以执行,因为创建容器的时候会创建BookService的对象(配置中写了),那么BookService对象即bean就存在创建后可结束销毁,依然可以运行初始化方法和销毁方法

运行结果

可以看到依然可以运行两个方法

注意一下执行顺序:

此时在初始化属性的时候加一个内容输出一下“我在初始化”

再执行起点程序,可以看到bean创建后的初始化方法是在类的属性初始化方法(即构造方法)运行完之后才运行的!!

这就是通过接口控制bean的生命周期!!

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言