设置bean的init-method可以指定bean的初始化方法,destroy-method可以指定销毁时调用的方法,在bean的整个生命周期中,调用方法的顺序为:构造方法——>setter方法(如果需要)——>init()方法——>destroy()方法。
<!--设置bean的初始化和销毁方法 -->
<bean id="car" class="com.ustc.yi.cycle.Car"
init-method="init"
destroy-method="destroy"
>
<property name="brand" value="奥迪"></property>
</bean>
init和deatroy都声明在Car类中
另外可以通过实现BeanPostProcessor接口来重写bean的初始化方法和销毁方法。
实现BeanPostProcessor接口,并具体提供
Object postProcessBeforeInitialization(Object bean, String beanName):在init-methord之前被调用
Object postProcessAfterInitialization(Object bean, String beanName):init-methord之后被调用
的实现
bean:bean实例本身
beanName:IOC容器配置的bean的名字
返回值:实际上是返回给用户的bean,可以在上面的两个方法中修改返回的bean,甚至返回一个新的bean
package com.ustc.yi.cycle;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
/**
* Created by Yi on 2019/5/27.
*/
public class MyBeanPostProcessor implements BeanPostProcessor{
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("postProcessBeforeInitialization"+bean+", "+beanName);
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("postProcessAfterInitialization"+bean+", "+beanName);
//返回一个新的对象
if("car".equals(beanName)){
Car car=new Car();
car.setBrand("宝马");
return car;
}
return bean;
}
}
在xml文件中配置bean的后置处理器,不需要id,IOC容器会自动识别
<!--配置bean的后置处理器,不需要id,IOC容器自动识别是一个BeanPostProcessor-->
<bean class="com.ustc.yi.cycle.MyBeanPostProcessor"/>