1、创建带有生命周期的bean,生命周期:bean的创建到销毁
(1)在Book类中添加以下两个方法:
public class Book {
public void myinit(){
System.out.println("图书初始化方法。。。");
}
public void myDestory(){
System.out.println("图书销毁方法。。。");
}
}
(2)在ioc.xml配置文件中添加bean
可以为bean自定义一些生命周期方法:spring在创建和销毁的时候会调用指定的方法
<bean id="book" class="atguigu.bean.Book" init-method="myinit" destroy-method="myDestory">
</bean>
(3)理解ioc容器中注册的bean的生命周期:
1)单例bean:容器启动的时候就好创建好,容器关闭也会销毁创建的bean
生命周期:(容器启动)构造器调用===>初始化方法调用====》(容器关闭)销毁方法调用。
2)多实例bean:获取的时候才创建
生命周期:获取bean的时候(构造器===》初始化方法)====》容器关闭也不会调用bean的销毁方法;什么时候用完则自动销毁。
2、bean的后置处理器:Spring的一个接口:可以在bean的初始化前后调用方法
(1)bean的后置处理器编写步骤
1)编写后置处理器的实现类
2)将后置处理器注册在配置文件中
(2)编写后置处理器的实现类(BeanPostProcessor)
public class MyBeanPostProcessor implements BeanPostProcessor {
/**
* postProcessBeforeInitialization
* 初始化之前调用
* Object bean:将要初始化的bean
*/
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("["+beanName+"]bean将要调用初始化方法。。。这个bean是这样的:["+bean+"]");
// 返回传入的bean
return bean;
}
/**
* postProcessAfterInitialization
* 初始化方法之后完成
* Object bean,
* String beanName:bean在xml中配置的id
*
*/
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("["+beanName+"]bean初始化方法调用完了。。。这个bean是这样的:["+bean+"]");
return bean;
}
}
(3)在配置文件中注册
<bean id="myBeanPostProcessor" class="atguigu.bean.MyBeanPostProcessor">
</bean>
(4)理解后置处理器的生命周期
在后置处理器中,单、双实例都有着同样的生命周期:(容器启动)构造器调用====》后置处理器Before====》初始化方法调用====》后置处理器After====》(容器关闭)销毁方法调用
无论bean是否有初始化方法;后置处理器都会默认有;还会继续工作。