Spring的生命周期 不要死记硬背 看示例
创建user类
public class User {
private String name;
public User() {
System.out.println("无参构造创建实例");
}
public void setName(String name) {
System.out.println("set方法被调用");
this.name = name;
}
//初始化方法需要在xml文件中配置 否则不生效 下同
public void init() {
System.out.println("初始化方法~~~");
}
public void destory() {
System.out.println("销毁方法~~~");
}
}
对应的spring.xml文件 配置对应的初始化和销毁方法
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="user" class="cn.bb.pojo.User"
init-method="init"
destroy-method="destory">
<property name="name" value="bb"></property>
</bean>
</beans>
测试
public class Test1 {
@Test
public void liveTest() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
User user = context.getBean("user", User.class);
System.out.println("使用user--" + user);
//最后销毁容器
context.close();
}
}
打印结果
由此可知 Spring的生命周期
- 通过构造器创建实例
- 为bean的属性设置值 也就是调用set方法
- 执行初始化方法—自定义的
- 获取示例对象
- 在容器关闭后 自动执行bean的销毁方法
但是 这五步还不够详细 其实忽略了后置处理器
它是一个接口 BeanPostProcessor
用了java8的默认实现 我们自己实现重写下该方法
public interface BeanPostProcessor {
@Nullable
default Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
@Nullable
default Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
}
其实就是打印输出一下
public class MyProcessor implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
//由名字可知 是初始化前置处理器
System.out.println("初始化前执行。。。。。");
return null;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
//由名字可知 是初始化后置处理器
System.out.println("初始化后执行。。。。。");
return null;
}
}
但是 他只是个普通的类 需要进行配置 这里还是用xml形式
spring.xml 新增该配置就可以了
<bean id="myprocessor" class="cn.bb.pojo.MyProcessor"></bean>
注意 bean的后置处理器 在所有类初始化前后都会执行输出语句
再次测试
所以生命周期一共分为7步
- 通过构造器创建实例
- 为bean的属性设置值 也就是调用set方法
- 执行bean示例的初始化前置通知
postProcessBeforeInitialization
- 执行初始化方法—自定义的
- 执行bean示例的初始化后置通知
postProcessAfterInitialization
- 获取示例对象
- 在容器关闭后 自动执行bean的销毁方法
生活总是让我们遍体鳞伤,但到后来,那些受伤的地方一定会变成我们最强壮的地方。