创建带有生命周期方法的bean
知识点
/**
*单例: Bean的生命周期
* (容器启动)构造器---->初始化方法---->(容器关闭)销毁方法
*多实例:
* 获取bean(构造器--->初始化方法)--->容器关闭不会调用bean的销毁方法
*
Spring有一个接口:后置处理器:可以在bean的初始化前后调用方法;
无论bean是否有初始化方法;后置处理器都会默认其有,还会继续工作;
*后置处理器:
* (容器启动)构造器------后置处理器before..-----初始化方法-----后置处理器after...-----bean初始化完成
*
*无论bean是否有初始化方法;后置处理器都会默认其有,还会继续工作;
Book和Car的实体类中(Book有初始化方法,Car没有)
*/
Book、Car实体类
public class Book {
private String bookName;
private String author;
public void myInit(){
System.out.println("这是图书的初始化方法...");
}
public void myDestory(){
System.out.println("这是图书的销毁方法...");
}
public Book() {
super();
// TODO Auto-generated constructor stub
System.out.println("book被创建");
}
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
@Override
public String toString() {
return "Book [bookName=" + bookName + ", author=" + author + "]";
}
}
public class Car {
private String carName;
private Integer price;
private String color;
public Car() {
super();
// TODO Auto-generated constructor stub
System.out.println("car被创建...");
}
public String getCarName() {
return carName;
}
public void setCarName(String carName) {
this.carName = carName;
}
public Integer getPrice() {
return price;
}
public void setPrice(Integer price) {
this.price = price;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
@Override
public String toString() {
return "Car [carName=" + carName + ", price=" + price + ", color="
+ color + "]";
}
}
后置处理器:
/**
* 1)、编写后置处理器的实现类
* 2)、将后置处理器注册在配置文件中
*/
public class MyBeanPostProcessor implements BeanPostProcessor{
/**
* postProcessBeforeInitialization:
* 初始化之前调用
*
* Object bean:将要初始化的bean
*/
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName)
throws BeansException {
// TODO Auto-generated method stub
System.out.println("postProcessBeforeInitialization...【"+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 {
// TODO Auto-generated method stub
System.out.println("postProcessAfterInitialization...【"+beanName+"】bean初始化方法调用完了...AfterInitialization..");
//初始化之后返回的bean;返回的是什么,容器中保存的就是什么
return bean;
}
}
xml文件
生命周期:bean的创建到销毁;
ioc容器中注册的bean;
1)、单例bean,容器启动的时候就会创建好,容器关闭也会销毁创建的bean
2)、多实例bean,获取的时候才创建;
我们可以为bean自定义一些生命周期方法;spring在创建或者销毁的时候就会调用指定的方法;
自定义初始化方法和销毁方法; The method must have no arguments,but may throw any exception
<bean id="book01" class="com.atguigu.bean.Book"
//该bean有初始化方法,会在初始化前后调用后置处理器
destroy-method="myDestory" init-method="myInit" >
</bean>
测试bean的后置处理器:BeanPostProcessor
Spring有一个接口:后置处理器:可以在bean的初始化前后调用方法;
无论bean是否有初始化方法;后置处理器都会默认其有,还会继续工作;
<bean id="beanPostProcessor" class="com.atguigu.bean.MyBeanPostProcessor"></bean>
//该bean无初始化方法,同样会调用后置处理器
<bean id="car01" class="com.atguigu.bean.Car"></bean>