`
gaoyuntao2005
  • 浏览: 312295 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

入门 16 - BeanFactoryPostProcessor接口

阅读更多

撰写Bean定义档通常使用XML来撰写,XML阶层式的组织为各种元素与属性设定来说相当的方便,然而XML文件在阅读时总是要费点心力,尤其是在文件中充满了许多定义内容时。
 对于程序来说,有一些选项在设定好后通常就不会去变更,而有一些选项可能得随时调整,这时候如果能提供一个更简洁的设定档,提供一些常用选项在其中随时更改,这样的程序在使用时会更有弹性。
 我们可以实作org.springframework.beans.factory.config.BeanFactoryPostProcessor接口来提供这个功能:

BeanFactoryPostProcessor.java

public interface BeanFactoryPostProcessor {

    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException;

}


 从BeanFactoryPostProcessor接口的名称上可以得知,实作此接口的Bean,可以在BeanFactory完成依赖注入后进行一些后继处理动作,要作什么动作取决于您,例如我们就可以在BeanFactory完成依赖注入后,根据我们提供的一个简单属性文件来设定一些经常变动的选 项。
 不过这个功能,Spring已经为我们提供了一个BeanFactoryPostProcessor的实作类别了: org.springframework.beans.factory.config.PropertyPlaceholderConfigurer。我 们来看一个Bean定义档的实际例子:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

    <bean id="configBean" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

        <property name="location">

            <value>hello.properties</value>

        </property>

    </bean>

 

    <bean id="helloBean" class="onlyfun.caterpillar.HelloBean">

        <property name="helloWord">

            <value>${helloWord}</value>

        </property>

 

        ....

    </bean>

  

     ......

 

</beans>


 假设在helloBean中有许多依赖注入的属性,这些都是比较不常变动的属性,而其中helloWord会经常变动,我们可以透过hello.properties来简单的设定:

hello.properties

helloWord=Hello!Justin!


 PropertyPlaceholderConfigurer会读取location所设定的属性文件,并将helloWord的值设定给${helloWord},从而完成依赖注入。
  另一种情况是,XML定义档中定义了一些低权限程序使用人员可以设定的选项,然而高权限的程序管理员可以透过属性文件的设定,来推翻低权限程序使用人员的设 定,以完成高权限管理的统一性,Spring也提供了这么一个BeanFactoryPostProcessor的实作类别: org.springframework.beans.factory.config.PropertyOverrideConfigurer。
 来看看Bean定义档如何设定:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

    <bean id="configBean" class="org.springframework.beans.factory.config.PropertyOverrideConfigurer">

        <property name="location">

            <value>hello.properties</value>

        </property>

    </bean>

 

    <bean id="helloBean" class="onlyfun.caterpillar.HelloBean">

        <property name="helloWord">

            <value>Hello!caterpillar!</value>

        </property>

 

        ....

    </bean>

 

     ....

</beans>


 在这个Bean定义档中,虽然helloBean已经设定好helloWord属性,然而高权限的管理者可以使用一个hello.properties来推翻这个设定:

hello.properties

helloBean.helloWord=Hello!Justin!


 上面指定了helloBean的属性helloWord为Hello!Justin!,根据Bean定义档与hello.properties的设定, 最后helloBean的helloWord会是Hello!Justin!而不是Hello!caterpillar!。

分享到:
评论

相关推荐

    Spring注解驱动扩展原理BeanFactoryPostProcessor

    首先,BeanFactoryPostProcessor是一个接口,它的postProcessBeanFactory方法将在BeanFactory标准初始化之后被调用。这个方法的参数是一个ConfigurableListableBeanFactory对象,这个对象提供了对BeanFactory的访问...

    com-spring-ioc-demo:源码主要是学习Spring IOC的原理,以及对Bean的注册及控制,主要运用以下类对Spring进行扩展学习:BeanPostProcessor,BeanFactoryAware,BeanNameAware,ApplicationContextAware,FactoryBean,BeanDefinitionRegistryPostProcessor,BeanFactoryPostProcessor,BeanPostProcessor,ResourceLoaderA

    更改bean的定义(BeanFactoryPostProcessor接口)3.注册Bean到Spring容器(BeanDefinitionRegistryPostProcessor接口)4.通过FactoryBean结合InvocationHandler关于动态代理invoke()方法的理解5.BeanNameAware 7....

    springLean:spring注解驱动开及源码分析

    8.1-BeanFactoryPostProcessor 8.2-BeanDefinitionRegistryPostProcessor 8.3-ApplicationListener使用 8.4-@EventListener与SmartInitializingSingleton 9,弹簧容器创建过程 10,Servlett3.0 10.1-简介 10.2-...

    Spring源码学习八:常用的扩展接口详解1

    最后,`BeanFactoryPostProcessor`接口的`postProcessBeanFactory(ConfigurableListableBeanFactory)`方法会在所有Bean实例化之前调用,允许对Bean的定义进行修改。这个接口允许开发者在容器完全初始化之前对配置...

    spring-reference

    - BeanFactoryPostProcessor允许开发者修改BeanFactory中的Bean定义。 - **The PropertyPlaceholderConfigurer and The PropertyOverrideConfigurer** - **PropertyPlaceholderConfigurer**:用于解析配置文件中...

    Spring 容器后处理器

    BeanFactoryPostProcessor接口是Spring框架提供的一个接口,用于扩展Spring容器的功能。该接口只有一个方法`postProcessBeanFactory`,该方法在容器加载完成之后被调用,可以用来改变容器中的配置或做一些初始化工作...

    Spring入门

    ### Spring入门知识点详解 #### Spring框架概述 - **Spring**是一个开源框架,旨在简化企业级应用的开发。作为一款轻量级的Java平台框架,Spring提供了广泛的解决方案,从基础的依赖注入(DI)到复杂的事务管理和...

    spring开发指南

    - **接口注入**(Type 1):通过接口的方法来注入依赖,这种方式在Spring中并不常用。 - **设值注入**(Type 2):通过setter方法来注入依赖,适用于属性较少的情况。 - **构造器注入**(Type 3):通过构造函数...

    Spring5.0中文开发手册

    ##### 1.1 Spring入门 Spring框架作为一个轻量级的应用程序框架,它的设计目标是为了简化企业级应用的开发过程。Spring提供了丰富的功能来帮助开发者构建可维护、可扩展的应用程序。 ##### 1.2 Spring框架简介 - ...

    Spring容器扩展机制的实现原理

    例如,可以使用BeanFactoryPostProcessor接口来修改BeanDefinition的信息,或者使用BeanPostProcessor接口来修改bean的实例化和初始化过程。 在实际开发中,可以使用@Configuration和@Bean注解来配置bean的实例化和...

    Spring笔记(第九次)1

    例如,你可以通过实现BeanFactoryPostProcessor接口,自定义一个处理器类,来修改bean的配置或者属性。在实际应用中,这可能包括设置bean的属性值,或者在运行时动态调整bean的行为。在Spring容器启动过程中,IoC...

    Spring源码分析.docx

    在创建了 BeanDefinition 对象后,Spring 框架会调用 BeanFactoryPostProcessor 接口对其进行增强处理。BeanFactoryPostProcessor 是一种特殊的接口,用于在 BeanDefinition 对象创建完成后对其进行修改或增强。例如...

    Spring注解驱动开发第36讲——或许,这是你以前没看过的从源码角度理解BeanFactoryPostProcessor的原理

    Spring注解驱动开发第36讲——或许,这是你以前没看过的从源码角度理解BeanFactoryPostProcessor的原理

    spring手工笔记

    - **BeanFactoryPostProcessor**:这个接口允许用户在所有的Bean定义被加载之后、容器初始化完成之前修改Bean的定义信息。 通过以上总结可以看出,Spring框架的核心在于其强大的依赖注入功能以及灵活的AOP支持,...

    spring 基础包(5个)

    BeanDefinition接口和BeanFactoryPostProcessor接口是其中的关键概念,前者定义了bean的属性,后者允许在bean初始化之前进行自定义处理。 3. **spring-context**: `spring-context-4.1.6.RELEASE.jar`扩展了`...

    高级Java人才培训专家-spring高级49讲

    - **BeanFactory后处理器**:分析BeanFactoryPostProcessor接口如何扩展Spring容器的功能。 - **Aware接口**:介绍Aware接口及其在Spring中的应用场景。 - **初始化与销毁**:深入研究Bean的初始化与销毁过程。 - **...

    spring3.1中文参考文档

    - 介绍了BeanFactoryPostProcessor接口及其使用示例。 - **4.8.3 使用FactoryBean来自定义实例化逻辑** - 介绍了FactoryBean接口的使用。 **4.9 基于注解的容器配置** - **4.9.1 @Required** - 介绍了@Required...

Global site tag (gtag.js) - Google Analytics