SpringIOC02_1

创建带有生命周期方法的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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值