Bean的生命周期
(1)通过类的参构造方法创建bean(默认无参构造方法,若在配置文件中使用构造方法注入则使用有参构造方法创建,并同时注入属性)
(2)为该bean进行set注入属性(set注入会覆盖有参构造的注入)
(3)调用BeanPostProcessor前置方法,重写postProcessBeforeInitialization方法(需要创建类实现BeanPostProcessor接口)
(4)调用初始化方法(需要在配置文件中使用init-method方法指定)
(5)获取bean进行使用
(6)调用BeanPostProcessor后置方法,重写postProcessAfterInitialization方法(需要创建类实现BeanPostProcessor接口)
(7)当容器关闭时(一般情况下不会关闭,可以手动调用close方法),调用销毁方法(需要在配置文件中使用destroy-method方法指定)
配置初始化方法和销毁方法
<!--bean标签中的init-method属性指定类中的初始化方法,destroy-method属性指定类中的销毁方法-->
<bean id="student" class="domain.Student" init-method="init" destroy-method="destroyed">
<!--set注入配置-->
<property name="name" value="张三"/>
<!--有参构造方法注入配置-->
<constructor-arg name="name" value="李四"/>
</bean>
<!--把实现BeanPostProcessor接口的方法配置为bean,spring会自动识别-->
<bean id="postProcessor" class="util.PostProcessor"/>
学生类
public class Student {
private String name;
public void setName(String name) { this.name = name; }
public String getName() { return name; }
public Student(){
System.out.println("学生对象使用无参构造方法初始化了...");
}
public Student(String name){
this.name = name;
System.out.println("学生对象使用有参构造方法初始化了...");
}
//xml文件配置的init-method
public void init(){
System.out.println("bean初始化方法执行了...");
}
//xml文件配置的destroy-method
public void destroyed(){
System.out.println("bean销毁方法执行了....");
}
}
自定义实现BeanPostProcessor接口的类
public class PostProcessor implements BeanPostProcessor {
//重写BeanPostProcessor前置方法
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("前置方法执行了...");
return bean;
}
重写BeanPostProcessor后置方法
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("后置方法执行了...");
return bean;
}
}
结果如下: