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(); // 手动关闭容器,暴力一些
}
使用接口控制生命周期的方式
实现 InitializingBean,DisposableBean 接口
该方式不需要在配置中设置 init-method,destroy-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;
}
}
生命周期阶段
- 初始化容器
- 创建对象(内存分配)
- 执行构造方法
- 执行属性注入(set操作)
- 执行bean初始化方法
- 使用bean
- 执行业务操作
- 关闭/销毁容器
- 执行bean销毁方法