Bean生命周期与模板方法
2022/4/6 6:22:04
本文主要是介绍Bean生命周期与模板方法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Bean生命周期与模板方法
- 本文为学习笔记,目录结构在文末
1、bean 的生命周期
- 四个生命周期:构造 -> 依赖注入 -> 初始化 ->销毁
- 四个生命周期之间可以通过添加后处理器强化这个 bean
1.1、生命周期
LifeCycleBean.class
public class LifeCycleBean { public static final Logger logger = LoggerFactory.getLogger(LifeCycleBean.class); public LifeCycleBean() { logger.info("lifecycle 构造函数"); } @Autowired //字符串类型默认不会做依赖注入,加@value 会在环境变量或者配置文件里面找。 //其他类型的注入会直接在 容器里面查找对应的类型做依赖注入 public void autowire (@Value("${JAVA_HOME}") String home){ logger.info("依赖注入:",home); } @PostConstruct public void init(){ logger.info("初始化"); } @PreDestroy //只有单例类型会在这里被销毁,其他另有时间 public void destroy(){ logger.info("销毁--"); } }
1.2、各个生命周期之间的可操作区间
myBeanPostProcessor.class
@component public class myBeanPostProcessor implements InstantiationAwareBeanPostProcessor, DestructionAwareBeanPostProcessor { public static final Logger logger = LoggerFactory.getLogger(LifeCycleBean.class); @Override public void postProcessBeforeDestruction(Object bean, String beanName) throws BeansException { if (beanName.equals("lifeCycleBean")){ logger.info("销毁之前执行的方法 ,如 @preDestroy"); } } @Override public Object postProcessBeforeInstantiation(Class<?> beanClass, String beanName) throws BeansException { if (beanName.equals("lifeCycleBean")){ logger.info("bean 实例化之前执行,返回不为 null 的话,会替换原来存在的bean"); } return null; } @Override public boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException { if (beanName.equals("lifeCycleBean")){ logger.info("bean 实例化之后执行,返回false 不会进行依赖注入阶段了,一般返回 true"); } return true; } @Override public PropertyValues postProcessProperties(PropertyValues pvs, Object bean, String beanName) throws BeansException { if (beanName.equals("lifeCycleBean")){ logger.info("依赖注入阶段执行,这里可以追加很多后处理器 比如@autowired、@resource"); } return pvs; } @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { if (beanName.equals("lifeCycleBean")){ logger.info("初始化前执行的方法 ,返回的bean会替换原来的对象,这一步可以执行@PostContruct、@ConfigurationProperties"); logger.info("前一个是初始化方法,后一个是springboot 里面 bean的属性和配置类的键值对绑定的注解"); } return bean; } @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { if (beanName.equals("lifeCycleBean")){ logger.info("初始化之后执行,返回的bean会替换原来的对象,这一步可以执行代理增强等操作"); } return bean; } }
这篇关于Bean生命周期与模板方法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-27数据结构与算法面试题详解及练习
- 2024-12-27网络请求面试题详解与实战
- 2024-12-27数据结构和算法面试真题详解与实战教程
- 2024-12-27网络请求面试真题解析与实战教程
- 2024-12-27数据结构和算法大厂面试真题详解与实战指南
- 2024-12-27TS大厂面试真题解析与应对策略
- 2024-12-27TS大厂面试真题详解与解析
- 2024-12-27网站安全入门:如何识别和修复漏洞
- 2024-12-27SQL注入基础教程
- 2024-12-27初学者指南:理解和修复跨域漏洞