Spring6-bean生命周期与循环依赖如何巧妙融合?

摘要:bean的生命周期 粗略划分5步 实例化bean 调用的是无参数的构造方法 bean属性赋值 执行set注入 初始化bean 调用bean的init()方法,需要自己写,自己配 使用bean 销毁bean 调用bean的destroy(),
bean的生命周期 粗略划分5步 实例化bean 调用的是无参数的构造方法 bean属性赋值 执行set注入 初始化bean 调用bean的init()方法,需要自己写,自己配 使用bean 销毁bean 调用bean的destroy(),需要自己写,自己配 注意:自定义的init()和destroy()需要在配置文件配置 <!-- init-method指定初始化方法,destroy-method指定销毁方法--> <!-- 这两个方法需要在bean类中定义--> <bean id="user" class="com.ali.bean.User" init-method="initBean" destroy-method="destroyBean"></bean> 进一步七步 在以上的5步中,第三步是初始化bean。其实可以在初始化之前和初始化之后添加代码。此时,需要加入“Bean后处理器”。 编写一个类实现BeanPostProcessor类,并重写before和after方法 实例化bean 调用的是无参数的构造方法 bean属性赋值 执行set注入 执行“Bean后处理器”的before方法 初始化bean 调用bean的init()方法,需要自己写,自己配 执行“Bean后处理器”的after方法 使用bean 销毁bean // 日志类bean后处理器 public class LogBeanPostProcessor implements BeanPostProcessor { @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { System.out.println("BeanPostProcessor befor方法"); return BeanPostProcessor.super.postProcessBeforeInitialization(bean, beanName); } @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { System.out.println("BeanPostProcessor after方法"); return BeanPostProcessor.super.postProcessAfterInitialization(bean, beanName); } } <!-- 配置bean后处理器 这个bean后处理器会在bean实例化后和初始化前后执行相应的方法 例如可以在bean初始化前后打印日志 需要实现BeanPostProcessor接口 这样spring容器在创建其他bean时会自动调用这个后处理器的相应方法 例如上面的springBean在实例化和初始化时就会调用LogBeanPostProcessor中的方法 这样就可以在控制台看到日志输出 这个bean后处理器必须配置在spring配置文件中,才能被spring容器识别和调用 这个bean后处理器将作用于当前配置文件中的所有bean --> <bean class="com.ali.bean.LogBeanPostProcessor" /> 精细化分为10步 实例化bean 调用的是无参数的构造方法 bean属性赋值 执行set注入 检查bean是否实现Aware相关接口(BeanNameAware, BeanClassLoaderAware, BeanFactoryAware),如果实现了,则调用这些接口相关的方法。
阅读全文