spring的后处理是spring对开开发的重要扩展点,bean的许多的功能的增强就是通过后处理实现的。他可以允许我们产于到bean的实例化路程中去
根据我们对于bean的实例化的认识,我们知道bean不是直接实例化成对象,而是先注册成为一个beanDefition,然后再根据这个definition实例化bean。于是在这个地方就给了我们一个修改definition的机会,从而改变我们创建的bean,我们的BeanFactoryPostProcess后处理就是基于这个原理。而我们的令一类后处理器BeanPostProcess则是在bean实例化结束后,但是还没有加入到我们的singletonObjects是对bean进行修改。
我们可以通过这个后处理进行beanDefinition的注册以及数据的填充和修改。
我们可以通过实现BeanDefinitionRegistryPostProcessor接口,达到在后处理中注册beanDefinition,不需要在xml中配置bean,也可实例化出bean。我们的@Component注解就是基于这个原理实现bean的注册。
我们还可以在properties文件中配置我们要的数据,这样我们就不需要在XML中配置,BeanFactoryPostProcess会帮我们将properties中的数据注册到BeanDefinition中的。
举个例子,对于我们的Druid,我们需要配置四个东西,平常直接将数据写死在XML中,但是现在我们可以这样
BeanFactoryPostProcess会将数据注入的
这样我们就不需要对XML进行繁杂的数据操作了,减少我们频繁操作XML文件,导致产生错误。
其实它内部还有一个自定义属性编辑器,可以帮助我们自己进行类型的转换。
spring提供了一个BeanPostProcessor接口,我们只要重写这两个方法就可以了。
public interface BeanPostProcessor {@Nullabledefault Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {return bean;}@Nullabledefault Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {return bean;}
}
在这个before和after方法之间就是我们bean的初始化方法。
下一篇:2023江苏网安系统加固题目