【Java】Bean的生命周期——print大法带你了解Bean的生命周期(深入)
从上一篇博客可以初步了解到Bean的生命周期总体包括:【创建Bean】——>【Bean属性赋值/填充】——>【Bean初始化】——>【使用Bean】——>【销毁Bean】这五个步骤,但是面试中如果只回答这些,面试官大概率是不会满意;现在,我将继续用print实战大法深入探究Bean的生命周期
一、初始化之前和之后还能干啥?
1、初始化之前
(1)*.Aware方法
首先,如果Bean实现了*.Aware接口(比如:BeanNameAware、BeanClassLoaderAware、BeanFactoryAware),就会执行对应的接口中的方法;
- 如果 Bean 实现了
BeanNameAware接口,调用setBeanName()方法,传入 Bean 的名字 - 如果 Bean 实现了
BeanClassLoaderAware接口,调用setBeanClassLoader()方法,传入 ClassLoader对象的实例。 - 如果 Bean 实现了
BeanFactoryAware接口,调用setBeanFactory()方法,传入 BeanFactory对象的实例。
public class Student1 implements BeanNameAware, BeanClassLoaderAware, BeanFactoryAware{
private String name;
public Student1() {
System.out.println("1、实例化");
}
public Student1(String name) {
this.name = name;
}
public void setName(String name) {
System.out.println("2、依赖注入");
this.name = name;
}
public void myInit() {
System.out.println("4、初始化");
}
public void myDestroy() {
System.out.println("7、销毁");
}
@Override
public void setBeanName(String s) {
System.out.println("初始化之前,setBeanName() 方法执行");
}
@Override
public void setBeanClassLoader(ClassLoader classLoader) {
System.out.println("初始化之前,setBeanClassLoader() 方法执行");
}
@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
System.out.println("初始化之前,setBeanFactory() 方法执行");
}
}
(2)BeanPostProcessor接口的的before方法
自定义一个Processor实现BeanPostProcessor接口
public class MyProcessor1 implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
if("student1".equals(beanName)) {
System.out.println("初始化前 BeanPostProcessor before 方法执行啦!");
}
return bean;
}
}
(3)InitializingBean接口的方法
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("InitializingBean接口方法执行");
}
(4)接下来就是Bean中定义的 init-method方法啦
public void myInit() {
System.out.println("4、初始化,init-method方法执行");
}
2、初始化之后
在自定义的Processor中可以加一个BeanPostProcessor after方法
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
if("student1".equals(beanName)) {
System.out.println("5、初始化后 BeanPostProcessor after 方法执行啦!");
}
return bean;
}
二、销毁之前还能干嘛?
如果Bean实现了DisposableBean接口,那么在销毁之前就会执行 destory()方法
public class Student1 implements DisposableBean{
@Override
public void destroy() throws Exception {
System.out.println("销毁之前, DisposableBean接口方法执行");
}
}
接下来就是Bean中的destroy-method方法的执行了
public void myDestroy() {
System.out.println("5、销毁");
}
三、测试

四、画个图总结一下


浙公网安备 33010602011771号