Bean生命周期

生命周期:Bean从创建到销毁的过程
生命周期控制:在bean创建后到销毁前做一些事情

public class BookDaoImpl implements BookDao{
    public void save(){
        System.out.println("book dao save ...");
    }

    // 表示bean初始化对应的操作
    public void init(){
        // 加载资源,文件等初始化的操作
        System.out.println(" ... ")
    }

    // 表示bean销毁前对应的操作
    public void destroy(){

    }
}
<bean id="bookDao" class="com.xxx.dao.impl.BookDaoImpl" init-method="init" destroy-method="destroy"/>
public staic void main(String[] args){

    // 获取IoC容器
    ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
    // 获取bean
    BookDao bookDao = (BookDao)ctx.getBean("bookDao");

    bookDao.save();
    ctx.registerShutdownHook(); // 注册关闭钩子 关虚拟机之前先关闭容器
    // ctx.close(); // 手动关闭容器,暴力一些
}

使用接口控制生命周期的方式

实现 InitializingBeanDisposableBean 接口
该方式不需要在配置中设置 init-methoddestroy-method

# BookServiceImpl.java
public class BookServiceImpl implements bookService, InitializingBean, disposablebean{
    private BookDao bookDao;

    public void setBookDao(BookDao bookDao){
        System.out.print("set .....");
        this.bookDao = bookDao;
    }

    public void save() {
        System.out.println("book service save ...");
        bookDao.save();
    }

    public void destroy() throws Exception {
        System.out.println("service destroy");
    }

    public void afterPropertiesSet() throws Exception{
        System.out.println("service init");
    }

    // 提供对应的set方法
    public void setBookDao(BookDao bookDao) {
        this.bookDao = bookDao;
    }
}

生命周期阶段

  • 初始化容器
    1. 创建对象(内存分配)
    2. 执行构造方法
    3. 执行属性注入(set操作)
    4. 执行bean初始化方法
  • 使用bean
    1. 执行业务操作
  • 关闭/销毁容器
    1. 执行bean销毁方法