Loading

【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、销毁");
}

三、测试

image

四、画个图总结一下

image

posted @ 2025-10-31 13:39  go__Ahead  阅读(70)  评论(0)    收藏  举报