一、两种后处理器(Bean后处理器和容器后处理器)
Spring框架提供了很好的扩展性,除了可以与各种第三方框架良好整合外,其IoC容器也允许开发者进行扩展,这种扩展甚至无须实现BeanFactory或ApplicationContext接口,而是允许通过两个处理器对IoC容器进行扩展。
1、Bean后处理器是一种特殊Bean,这种特殊Bean并不对外提供服务,它甚至可以无须id属性,它主要负责对容器中的其他Bean执行后处理,例如为容器中的Bean生成代理等,这种Bean被称为后处理器。
Bean后处理器必须实现BeanPostProcessor接口,它会在Bean实例创建成功后对Bean进行进一步增强处理,该接口包含如下两个方法:
Object postProcessBeforeInitialization(Object bean,String name) throw BeansException目标Bean初始化之前被回调
Object postProcessAfterInitialization(Object bean,String name) throw BeansException目标Bean初始化之后被回调
关联之前基本用法中提到的init-method和实现InitializingBean后提供的afterPropertiesSet()方法,它们的调用顺序如下图
如果采用BeanFactory作为Spring容器时必须手动注册BeanPostProcessor,如果用ApplicationContext作为容器则无需手动注册,它会自动检测到Bean后处理器,自动注册。
如果需要对容器中谋一批Bean进行通用的增强处理,则可考虑使用Bean后处理器
2、容器后处理器负责处理容器本身,它必须实现BeanFactoryPostProcessor接口,该接口必须实现如下一个方法:
void postProcessorBeanFactory(ConfigurableListableBeanFactory beanFactory)由于此方法只是对Spring容器进行后处理,它并不需要完全替换Spring容器,因此该方法无需任何返回值。
实现postProcessorBeanFactory接口的容器后处理器不仅可对BeanFactory执行后处理,也可以对ApplicationContext容器执行后处理。容器后处理器还可用来注册额外的属性编辑器。
Spring已提供如下几个常用的容器后处理器。
①PropertyPlaceHolderConfigurer:属性占位符配置器。
负责读取属性文件里的属性值,并将这些属性值设置成Spring配置文件的元数据,通过使用此后处理器可以将Spring配置文件中的部分元数据放在属性文件中设置,这种配置方式当然有其优势:可以将部分相似的配置(比如说数据库的URL、用户名和密码)放在特定的属性文件失踪,如果只需要修改这部分配置,则无需修改Spring配置文件,修改属性文件即可,从而降低修改配置文件产生错误的风险。(注意抽离得太多个属性文件,可能会降低Spring配置文件的可读性)
例:<bean class="org.springframework,beans.factory.config.PropertyPlaceHolderConfigurer">
<property name="locations">
<list>
<value>dbconn.properties</value>
<!--如果有多个属性文件,依次在下面列出来-->
<!--value>wawa.properties</value-->
</list>
</property>
</bean>
②PropertyOverrideConfigurer:重写占位符配置器。
PropertyOverrideConfigurer的属性文件指定的信息可以直接覆盖Spring配置文件中的元数据。即:PropertyOverrideConfigurer允许XML配置文件中又默认的配置信息。
<bean class="org.springframework,beans.factory.config.PropertyOverrideConfigurer">
<property name="locations">
<list>
<value>dbconn.properties</value>
<!--如果有多个属性文件,依次在下面列出来-->
<!--value>wawa.properties</value-->
</list>
</property>
</bean>
相关推荐
一部分详细分析了Spring的核心:IoC容器和AOP的实现,能帮助读者了解Spring的运行机制;第二部分深入阐述了各种基于IoC容器和AOP的Java EE组件在Spring中的实现原理;第三部分讲述了ACEGI安全框架、DM模块以及Flex...
“《深入解析Spring MVCgn Web Flow》为Spring社区弥补了一大空白。” ——Lasse Koskela.JavaRanch版主,Test Driven作者“《深入解析Spring MVCgn Web Flow》是非常急缺的深入讲解Spring MVCf~~Spring Web Flow的...
Spring技术内幕:深入解析Spring架构与设计原理.pdf
Spring技术内幕:深入解析Spring架构与设计原理(第2版) .pdf
深入理解spring cloud与微服务构建 pdf高清完整版下载 带目录
SPRING技术内幕:深入解析SPRING架构与设计原理SPRING技术内幕:深入解析SPRING架构与设计原理SPRING技术内幕:深入解析SPRING架构与设计原理SPRING技术内幕:深入解析SPRING架构与设计原理SPRING技术内幕:深入解析...
Spring技术内幕:深入解析Spring架构与设计原理[汇编].pdf
Spring技术内幕-深入解读Spring3.0源代码,本资源为part4/共part5
方志朋版——深入理解Spring Cloud与微服务构建,学习 Cloud可以看下,内容不太深
spring技术内幕第2版深入解析spring架构框架与设计原理计文柯
Tom_深入分析Spring源码docTom_深入分析Spring源码doc
用一个小项目模拟出一个微型的spring项目,实现spring的核心功能-aop,ioc和自动注入,帮助初学者了解spring的运行原理,以后面试再也不怕碰到问spring原理的问题了
第一部分详细分析了Spring的核心:IoC容器和AOP的实现,能帮助读者了解Spring的运行机制;第二部分深入阐述了各种基于IoC容器和AOP的Java EE组件在Spring中的实现原理;第三部分讲述了ACEGI安全框架、DM模块以及Flex...
Spring技术内幕-深入解读Spring3.0源代码,本资源为part3/共part5
《深入理解Spring Cloud与微服务构建》word版本
国内第一本基于Spring3.0的著作,从源代码的角度对Spring的内核和各个主要功能模块的架构、设计和实现原理进行了深入剖析。你不仅能从木书中参透Spring框架的优秀架构和设计思想,而且还能从Spring优雅的实现源码...
[Spring技术内幕:深入解析Spring架构与设计原理
spring