您现在的位置是:亿华云 > 数据库
Spring奇技淫巧之扩展点的应用
亿华云2025-10-04 03:04:17【数据库】9人已围观
简介本文转载自微信公众号「月伴飞鱼」,作者日常加油站。转载本文请联系月伴飞鱼公众号。最近在看公司项目和中间件的时候,看到一些Spring扩展点的使用,写篇文章学习下,对大家之后看源码都有帮助「首先先介绍下
本文转载自微信公众号「月伴飞鱼」,奇技作者日常加油站。淫巧用转载本文请联系月伴飞鱼公众号。扩展点
最近在看公司项目和中间件的奇技时候,看到一些Spring扩展点的淫巧用使用,写篇文章学习下,扩展点对大家之后看源码都有帮助
「首先先介绍下Bean的奇技生命周期」
我们知道Bean的生命周期分为几个主干流程
Bean(单例非懒加载)的实例化阶段 Bean的网站模板属性注入阶段 Bean的初始化阶段 Bean的销毁阶段下面是整个Spring容器的启动流程,可以看到除了上述几个主干流程外,淫巧用Spring还提供了很多扩展点
下面详细介绍下Spring的扩展点常见的扩展点
Spring常见扩展点
「BeanFactoryPostProcessor#postProcessBeanFactory」
有时候整个项目工程中bean的数量有上百个,而大部分单测依赖都是源码库奇技整个工程的xml,导致单测执行时需要很长时间(大部分时间耗费在xml中数百个单例非懒加载的淫巧用bean的实例化及初始化过程)
解决方法:利用Spring提供的扩展点将xml中的bean设置为懒加载模式,省去了Bean的扩展点实例化与初始化时间
public class LazyBeanFactoryProcessor implements BeanFactoryPostProcessor { @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { DefaultListableBeanFactory fac = (DefaultListableBeanFactory) beanFactory; Map<String, AbstractBeanDefinition> map = (Map<String, AbstractBeanDefinition>) ReflectionTestUtils.getField(fac, "beanDefinitionMap"); for (Map.Entry<String, AbstractBeanDefinition> entry : map.entrySet()) { //设置为懒加载 entry.getValue().setLazyInit(true); } } }「InstantiationAwareBeanPostProcessor#postProcessPropertyValues」
非常规的配置项比如
<context:component-scan base-package="com.zhou" />很赞哦!(26)