`
zjm16
  • 浏览: 71055 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
文章分类
社区版块
存档分类
最新评论

spring中所配置Bean的後處理方式(轉)

阅读更多
BeanFactoryPostProcessor 接口是对Bean 工厂的后处理操作。


在Spring 的PropertyPlaceholderConfigurer 类是实现BeanFactoryProcessor 接口中非常有用的类。它用于Spring 从外部属性文件中载入属性,并使用这些属性值替换Spring 配置文件中的占位符变量(${varible})。


Spring 的ApplicationContext 容器可以非常方便的使用PropertyPlaceholderConfigurer,只需通过简单的配置即可使用。

示例:
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="jdbc.properties" />
</bean>

如果需要使用多个配置文件可以使用PropertyPlaceholderConfigurer 的locations属性。


具體一點的例子如下:

Spring的框架中为您提供了一个 BeanFactoryPostProcessor 的实作类别: org.springframework.beans.factory.config.PropertyPlaceholderConfigurer。藉由这个类别,您可以将一些组态设定,移出至.properties档案中,如此的安排可以让XML定义档负责系统相关设定,而.properties档可以作为客户根据需求,自定义一些相关的参数。
来看一个Bean定义档的实际例子:

beans-config.xml
<?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>${onlyfun.caterpillar.helloWord}</value>
          </property>
      </bean>
</beans>
假设在helloBean中有许多依赖注入的属性,这些都是比较不常变动的属性,而其中helloWord会经常变动,可以透过hello.properties来简单的设定,而这个资讯已设定在configBean的location属性中:


hello.properties
onlyfun.caterpillar.helloWord=Welcome!
在helloBean的helloWord属性中,${onlyfun.caterpillar.helloWord}将会被hello.properties的helloWord所取代。

如果有多个.properties档案,则可以透过locations属性来设定,例如:

beans-config.xml
<?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="locations">
              <list>                  <value>hello.properties</value>
                  <value>welcome.properties</value>
                  <value>other.properties</value>    
              </list>
          </property>           </bean>

      <bean id="helloBean" class="onlyfun.caterpillar.HelloBean">
          <property name="helloWord">
              <value>${onlyfun.caterpillar.helloWord}</value>
          </property>
          ...
      </bean>
</beans> ======================================PropertyPlaceholderConfigurer类就是bean factory post-processor的一种,它的作用是一个资源属性的配置器,能够将BeanFactory的里定义的内容放在一个以.propertis后缀的文件中。
例如---spring-context.xml----
<bean id="propertyConfigurer"   class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
         <property name="locations">
             <list>
                 <value>/WEB-INF/jdbc.properties</value>
             </list>
         </property>
</bean>

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName"><value>${driver}</value></property>
    <property name="url"><value>jdbc:${dbname}</value></property>
</bean>而实际的jdbc.propertis文件是
jdbc.driverClassName=org.hsqldb.jdbcDriver
jdbc.url=jdbc:hsqldb:hsql://production:9002
jdbc.username=sa
jdbc.password=root
而jdbc.propertis是怎样引用的呢: 将上边一段配置注册在web.xml中就可以了
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-context.xml</param-value>
</context-param>
当然,不要忘了spring的监听器注册
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
这样,一个简单的数据源就设置完毕了。
实际上,PropertyPlaceholderConfigurer起的作用就是将占位符指向的数据库配置信息放在bean中定义
的工具。
分享到:
评论

相关推荐

    spring IOC反射装载bean

    在这个特定的"spring IOC反射装载bean"的主题中,我们将深入探讨Spring如何通过XML配置文件来加载和管理Bean,并利用Java的反射机制来实例化这些Bean。 首先,Spring容器通过读取XML配置文件来获取Bean的定义。这些...

    Spring实例化Bean顺序

    综上所述,Spring Bean的实例化顺序是一个复杂的过程,涉及到配置、依赖关系、注解和接口等多个层面。理解这些机制有助于优化和调试应用程序,确保Bean的正确初始化和协同工作。在实际开发中,应谨慎处理Bean的实例...

    Spring Bean 加载顺序 .

    Spring支持多种配置方式,包括XML、Java配置类(@Configuration)、注解(@Component、@Service等)以及通过@ConfigurationProperties处理YAML或Properties文件。在实验小例子中,我们可能看到这几种配置方式的组合...

    jdk代理,cgib代理和spring后处理bean的关系

    本文将围绕“JDK代理”、“CGI代理”以及它们与Spring后处理Bean的关系进行深入探讨。 首先,JDK代理,也称为接口代理,是Java内置的一种动态代理机制。通过实现`java.lang.reflect.InvocationHandler`接口并调用`...

    Spring在应用中获得Bean的方法

    此外,`@Autowired`注解的工作原理涉及`AutowiredAnnotationBeanPostProcessor`类,它是一个Bean后处理器,会在Bean实例化后进行处理,找到匹配的依赖并注入。 在开发中,Spring提供的各种工具如`BeanPostProcessor...

    Java中Spring获取bean方法小结

    这里我们将详细探讨如何在Java中通过Spring获取配置的bean。 1. **BeanFactory与ApplicationContext** - **BeanFactory** 是Spring中最基础的IoC容器,负责管理和实例化Bean。它允许开发者定义Bean的生命周期和...

    线程中获取spring 注解bean

    创建一个切面,定义切点并实现所需逻辑,确保在多线程环境中正确处理bean。 3. **ExecutorService**:Spring提供的`TaskExecutor`或Java的`ExecutorService`可以用来创建线程池。在提交任务时,可以将bean作为参数...

    spring自动扫描和管理Bean的示例

    在Spring框架中,自动扫描和管理Bean是一种便捷的方式,它允许开发者无需显式地在配置文件中声明每个Bean,而是让Spring容器自动发现并管理应用中的组件。这一特性极大地简化了Spring应用的配置,提高了开发效率。...

    Spring Bean重复执行两次(实例被构造两次)问题分析

    综上所述,Spring Bean重复执行两次的问题通常是由于配置错误、依赖注入循环、初始化回调的不当使用、静态工厂方法的误用、AOP代理的配置问题或是Bean作用域设置不准确导致的。通过仔细检查和修正这些问题,可以避免...

    spring的bean加载顺序样例项目

    - 如果有多个配置源,如多个`beans.xml`文件或混合Java配置,Spring会合并所有的Bean定义,然后按照合并后的顺序进行处理。 在"sample"这个压缩包项目中,我们可以创建多个Bean,通过观察它们的初始化顺序来验证...

    spring 中特殊bean用法

    9. **Bean后处理器(Bean Post Processor)**: Bean后处理器允许在初始化Bean之后和销毁Bean之前执行自定义逻辑。通过实现`BeanPostProcessor`接口,我们可以自定义Bean的初始化和销毁行为。 10. **Resource注入**:...

    Spring动态加载配置文件

    在Spring框架中,动态加载配置文件是一项重要的功能,它使得开发者在开发过程中无需重启应用就能实时更新配置,极大地提高了开发效率。热部署方案是这一功能的具体应用,它允许我们在不中断服务的情况下,对应用程序...

    Spring中Bean的生命周期 applicationcontext的应用(实现国际化,事件的传递)

    在Spring框架中,Bean的生命周期管理和ApplicationContext的应用是两个核心概念,它们对于理解Spring如何管理和协调应用中的对象至关重要。本文将深入探讨这两个主题,并结合国际化(i18n)和事件传递来阐述它们在...

    Spring学习笔记(9)----让Spring自动扫描和管理Bean

    在Spring框架中,自动扫描和管理Bean是一种便捷的方式,它允许开发者无需显式配置每个Bean,而是通过指定包路径来让Spring自动发现和管理Bean。本文将深入探讨这个主题,帮助你更好地理解和应用这一功能。 首先,让...

    spring bean的生命周期测试代码

    在Spring框架中,Bean的生命周期管理是其核心特性之一,它允许开发者控制Bean从创建到销毁的整个过程。本资源提供了在Spring 4.2环境下关于Bean生命周期的测试代码,帮助我们深入理解这一关键概念。 首先,让我们...

    spring容器初始化bean和销毁bean之前进行一些操作的方法

    总结起来,Spring提供了多种方式让我们能够在Bean的生命周期中插入自定义操作。选择哪种方式取决于具体需求,如代码的可维护性、灵活性以及是否需要统一处理。在理解和掌握了这些知识后,我们可以更好地控制Bean的...

    Spring框架xml注解配置方式实例

    7. **XML配置中的bean定义**:尽管大部分配置可以通过注解完成,但在某些情况下,我们仍需在XML文件中声明bean,例如,当需要自定义初始化方法、配置特定的bean属性,或者处理非Java组件(如数据库连接池)时。...

    使用Spring配置文件实现AOP

    在Spring的XML配置文件中,我们可以创建一个`&lt;aop:config&gt;`元素,并在其内部定义`&lt;aop:advisor&gt;`来创建Advisor。Advisor的`advice-ref`属性用于指定通知bean的ID,`pointcut-ref`属性用于指定切点bean的ID。 2. ...

    Spring_ClassPathResource获得bean对象

    总结来说,Spring的ClassPathResource是处理类路径资源的强大工具,它使开发者能够方便地加载和使用类路径中的文件,如XML配置文件,进而实现bean的初始化和管理。在学习和应用过程中,结合具体场景和需求,我们可以...

    day38 09-Spring类的完整生命周期及后处理Bean

    - `InitializingBean`后处理:如果Bean实现了`InitializingBean`接口,Spring会调用`afterPropertiesSet()`方法。 5. **容器级回调**: 如果Bean定义了`@PostConstruct`注解的方法,Spring会在初始化后调用。这为...

Global site tag (gtag.js) - Google Analytics