深入使用Spring(一)

两种后处理器

IoC 容器允许开发者进行扩展,通过两个后处理器对IoC 容器进行扩展, Spring提供了两个常用的后处理器:

1、 Bean后处理器 对容器中特定的 Bean 进行定制

2、 容器后处理器 对IoC 容器中进行特定的后处理

*********************************************************************

Bean后处理器

※  Bean后处理器是一种特殊的 Bean ,不对外提供服务。因此无需 id 属性,它负责对容器中的其他 Bean 执行后处理,譬如:为容器中的目标 Bean 生成代理。在 Bean 创建成功之后,对其进一步地加强处理。

※  Bean后处理器必须实现 BeanPostProcessor 接口,该接口中包含两个方法:

a) Object postProcessorBeforeInitialization(Object bean, String name) throws BeanException,该方法第一个参数就是即将初始化的 Bean 实例,第二个参数是 Bean 实例的名字( Bean 初始化之前)

b) Object postProcessorAfterInitialization(Object bean, String name) throws BeanException,该方法第一个参数就是即将初始化的 Bean 实例,第二个参数是 Bean 实例的名字( Bean 初始化之后)

<!--配置 bean 后处理器,可以没有 id ,此处 id 属性为了后面引用 -->

<bean id="beanPostProcessor" class="vivi.MyBeanPostProcessor" />

※  如果使用BeanFactory 作为 Spring 容器,必须手动注册 Bean 后处理器,因此在程序中先取得 Bean 后处理器实例,然后手动注册。

MyBeanPostProcessor postProcessor = (MyBeanPostProcessor )factory.getBean("beanPostProcessor");

※  用处:生成代理(根据容器中配置的拦截器创建目标Bean 代理,在目标 Bean 的基础上修改得到)

a) BeanNameAutoproxyCreator,根据 Bean 实例的 name 属性,创建 Bean 实例的代理

b) DefaultAdvisorAutoproxyCreator,根据 Advisor ,对容器中所有的 Bean 实例创建代理

*********************************************************************

容器后处理器

※  负责处理容器本身。

※  实现接口BeanFactoryPostProcessor 接口,必须实现一个方法:

void postProcessorBeanFactory(ConfigurableListableBeanFactory beanFactory);

可以实现对容器的任意扩展。与BeanPostProcessor 类似, BeanFactory 需要手动注册,ApplicationContext 则不需要。

※  Spring提供的两个常用的容器后处理器

PropertyPlaceHolderConfigurer

属性占位符配置器,负责读取Java 属性文件里的属性值,并将这些属性值设置到 Spring容器定义中。

可以将部分相似的配置,放在特定的属性文件中,如果需要只修改这部分配置,则无需修改Spring 配置文件,修改属性文件即可。大大降低了修改配置的风险。

<!--配置一个容器后处理器 -->

<bean id="propertyConfigurer" class="class="org.springframework.beans.factory.config.PropertyPlaceHolderConfigurer">

<!--locations指定属性文件的位置 -->

<property name="locations">

<list>

<value>dbconn.properties</value>

</list>

</properties>

</bean>

<!--定义数据源 Bean ,使用 C3P0 数据源实现 -->

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destory-methos="close" >

<property name="driverClass" value="${jdbc.driverClassName}" / >

<property name="jdbcUrl" value="${jdbc.url}" / >

<property name="user" value="${jdbc.user}" / >

<property name="password" value="${jdbc.password} / >

</bean>

提供属性文件

jdbc.driverClassName = com.mysql.jdbc.Driver

jdbc.url = jdbc:mysql://localhost/vivi

jdbc.user = vivi

jdbc.password = vivi

PropertyOverrideConfigurer

※  Spring提供的另一个容器后处理器,与上面的容器后处理器大致相同。区别:PropertyOverrideConfigurer使用的属性文件用于覆盖 XML 配置文件中的定义。即PropertyOverrideConfigurer 允许 XML 配置文件中有默认的配置信息。

※  PropertyOverrideConfigurer的配置文件格式:

beanName.property = value

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值