欢迎来我博客阅读更多的文章~https://endwas.cn
spring中有太多的扩展点,总记得很零散,有些扩展点也只简单知道用途,不知其所以然,所以写篇博客总结归纳一下,如果有遗漏欢迎告知,会进行补充~
1.Spring中扩展点
1.BeanFactoryProcessor
容器扩展接口,调用时机在Spring读取BeanDefinition信息之后,实例化bean之前。
可用作修改已经注册的BeanDefinition,比如修改类的属性、是否懒加载、类名等。
/**
* 一个接口方法用于
**/
void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException;
子接口 BeanDefinitionRegistryPostProcessor
这个接口也只有一个实现方法,这个方法参数是BeanDefinitionRegistry,我们的容器是实现了这个接口,所以可以对容器中的beandefinition进行增删查改。
void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException;
2.BeanPostProcessor
Bean的后置处理器,在bean的生命周期各个阶段起到扩展和应用,常见的应用有初始化前@postConstruct解析执行,初始化后aop的动态代理。
/**
* 初始化前的扩展
**/
@Nullable
default Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
@Nullable
default Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
1.子接口InstantiationAwareBeanPostProcessor
Bean实例化处理器,相当于在创建这个bean的前后做扩展,在bean通过反射创建前后的扩展。
- postProcessAfterInstantiation:注意它的返回值是boolean而不是obj,因为它的返回值是决定要不要调用postProcessPropertyValues方法。
- postProcessProperties: 顾名思义处理属性值 作用:对属性值进行修改,如果postProcessAfterInstantiation方法返回false,该方法可能不会被调用。可以在该方法内对属性值进行修改。
@Nullable
default Object postProcessBeforeInstantiation(Class<?> beanClass, String beanName) throws BeansException {
return null;
}
default boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException {
return true;
}
@Nullable
default