生命周期:从创建到消亡的完整过程
bean生命周期:bean从创建到销毁的整体过程
初始化容器:1.创建对象(内存分配)
2.执行构造方法
3.执行属性注入(set操作)
4.执行bean初始化方法
使用bean:1.执行业务操作
关闭/销毁容器:1.执行bean销毁方法
bean生命周期控制:在bean创建后到销毁前做一些事情
提供生命周期控制方法
public class BookDaoImpl implements BookDao{
public void save() {
System.out.println("book dao save...");
}
//表示bean初始化对应的操作
public void init(){
System.out.println("init....");
}
//表示bean销毁前对应的操作
public void destory(){
System.out.println("destory....");
}
}
配置生命周期控制方法
<bean id="bookDao" class="com.example.iocdeno04.BookDaoImpl" init-method="init" destroy-method="destory" />
实现InitializingBean DisposableBean接口
public class BookServiceImpl implements BookService, InitializingBean , DisposableBean {// 通过接口控制来实现bean生命周期控制
private BookDao bookDao ;
public void save(){
System.out.println("book service save..");
}
public void setBookDao(BookDaoImpl bookDao) {
System.out.println("set....");
this.bookDao=bookDao;
}
@Override
public void destroy() throws Exception {
System.out.println("service destory...");
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("service init....");
}
}
BookDao
package com.example.iocdeno04;
public interface BookDao {
public void save();
}
BookDaoImpl
package com.example.iocdeno04;
public class BookDaoImpl implements BookDao {
public void save() {
System.out.println("book dao save...");
}
//表示bean初始化对应的操作
public void init(){
System.out.println("init....");
}
//表示bean销毁前对应的操作
public void destory(){
System.out.println("destory....");
}
}
BookService
package com.example.iocdeno04;
public interface BookService {
public void save();
}
BookServiceImpl
package com.example.iocdeno04;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import java.sql.SQLOutput;
public class BookServiceImpl implements BookService, InitializingBean , DisposableBean {// 通过接口控制来实现bean生命周期控制
private BookDao bookDao ;
public void save(){
System.out.println("book service save..");
}
public void setBookDao(BookDaoImpl bookDao) {
System.out.println("set....");
this.bookDao=bookDao;
}
@Override
public void destroy() throws Exception {
System.out.println("service destory...");
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("service init....");
}
}
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<bean id="bookDao" class="com.example.iocdeno04.BookDaoImpl" init-method="init" destroy-method="destory" />
<bean id="bookService" class="com.example.iocdeno04.BookServiceImpl">
<property name="bookDao" ref="bookDao"/>
</bean>
</beans>
AppForCycle
此代码中包含容器的关闭和销毁
ctx.registerShutdownHook()方法是关闭注册钩子,放在代码任何位置任何时刻都可以
ctx.close()方法是销毁容器,如果放在前面,则后续关于bean的操做无法进行
package com.example.iocdeno04;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class AppForLifeCycle {
public static void main(String[] args) {
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
BookDao bookDao =(BookDao) ctx.getBean("bookDao");
bookDao.save();
//ctx.registerShutdownHook() ;//关闭钩子 在任何位置时刻都可以
ctx.close();//关闭容器 相对较为暴力 只能放在最后,若放在前面容器提前关闭,其他操作无法实现
}
}