spring 容器扩展点之PropertyPlaceholderConfigurer
PropertyPlaceholderConfigurer是个bean工厂后置处理器的实现,也就是BeanFactoryPostProcessor接口的一个实现。关于BeanFactoryPostProcessor和BeanPostProcessor类似。
PropertyPlaceholderConfigurer可以将上下文(配置文件)中的属性值放在另一个单独的标准java Properties文件中去。这样的话,只需要对properties文件进行修改,而不用对xml配置文件进行修改。
下面将通过一个例子来理解PropertyPlaceholderConfigurer。
首先是配置文件,代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation=" http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd">
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="propertyPlaceHolder.properties"/>
</bean>
<bean id ="student" class="co.jp.beanFactoryPost.Student">
<property name="name">
<value>${name}</value>
</property>
<property name="age">
<value>${age}</value>
</property>
<property name="birth">
<value>${birth}</value>
</property>
</bean>
</beans>
在这个配置文件中最重要的就是下面这段代码,
PropertyPlaceholderConfigurer会读取location所设定的属性文件,并将properties文件中的值,设定给${name},${age},${birth}从而完成依赖注入。
相应的properties文件的定义如下:
name=xiaohailin
age=27
birth=19820123
这里用到的student bean,的class的代码如下:
package co.jp.beanFactoryPost;
public class Student {
private String name;
private String age;
private String birth;
public void setName(String name){
this.name = name;
}
public void setAge(String age){
this.age = age;
}
public void setBirth(String birth){
this.birth = birth;
}
public String getName(){
return this.name;
}
public String getAge(){
return this.age;
}
public String getBirth(){
return this.birth;
}
}
接着,写一个测试的主类,代码如下:
public class PropertyHolderPlaceDemo {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("propertyPlaceHolder.xml");
Student student = (Student) ctx.getBean("student");
System.out.println(student.getAge());
System.out.println(student.getBirth());
System.out.println(student.getName());
}
}
分享到:
相关推荐
Bean的作用域决定了每次请求或创建时,Spring容器会返回多少个独立的实例。默认情况下,Spring以`singleton`作用域创建Bean,意味着在整个容器生命周期内,只会有一个实例。如果需要每次请求或调用时都创建新的实例...
- **BeanPostProcessors** 和 **BeanFactoryPostProcessors**:允许开发者在Spring容器启动过程中对Bean定义进行修改。 - **PropertyPlaceholderConfigurer** 和 **PropertyOverrideConfigurer**:用于在运行时动态...
3.7. 容器扩展点 3.7.1. 用BeanPostProcessor定制bean 3.7.1.1. 使用BeanPostProcessor的Hello World示例 3.7.1.2. RequiredAnnotationBeanPostProcessor示例 3.7.2. 用BeanFactoryPostProcessor定制配置元数据 3.7....
Spring默认的`PropertyPlaceholderConfigurer`不直接支持加密的属性文件,但它提供了扩展点,允许我们自定义实现来处理加密后的属性。以下是一种实现方式: 1. 创建一个自定义的`PropertyPlaceholderConfigurer`...
- **功能**: 它能够将`properties`文件中的键值对映射到Spring容器中,供其他Bean使用。 **2. 动态加载配置文件** - **目的**: 根据部署环境的不同,动态地更改应用使用的配置文件,从而实现环境间的灵活切换。 - *...
综上所述,Spring框架通过其强大的依赖注入机制和丰富的扩展点,为Java开发者提供了一个灵活、高效、可扩展的开发平台。无论是构建简单的Web应用还是复杂的企业级系统,Spring都能提供强有力的支持。
根据提供的文档信息,我们可以深入探讨Spring框架的核心概念与特性,特别是版本1.2中的关键知识点。...Spring框架的强大之处在于它的灵活性和可扩展性,这些特点使得它成为构建Java应用程序的理想选择之一。
12.2.3.Spring.NET提供的切入点实现类 12.2.3.1.静态切入点 12.2.3.2.动态切入点 12.2.4.自定义切入点 12.3.Spring.NET的通知类型 12.3.1.通知的生命周期 12.3.2.通知类型 12.3.2.1.拦截环绕通知 12.3.2.2.前置通知 ...
IoC使得对象的创建和依赖关系的管理由Spring容器负责,而AOP则允许开发者分离关注点,如日志、事务管理等,使其独立于业务逻辑。 在实际应用中,首先需要将Spring的jar包导入项目中,然后创建一个名为`...
Spring容器是整个框架的基础,它负责管理对象的生命周期和依赖关系。主要分为两种类型的容器:BeanFactory和ApplicationContext。BeanFactory是基本的容器,提供对bean的配置和管理;而ApplicationContext则在...
3. **使用占位符**:在其他Bean的配置中,通过`${...}`语法引用外部属性文件中的键值,Spring容器在启动时会自动进行替换。 #### 四、深入理解与最佳实践 为了更有效地利用**属性占位符配置器**,开发者应关注以下...