`

编码方式获取Spring中PropertyPlaceholderConfigurer的属性

阅读更多
applicationContext.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
	<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="location">
			<value>name.properties</value>
		</property>
	</bean>
	<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="location">
			<value>birthday.properties</value>
		</property>
	</bean>
</beans>

birthday.properties属性文件
birthday=2012-12-12

name.properties属性文件
name=kid

SpringPropertyResourceReader.java
package utils;
import java.lang.reflect.Method;
import java.util.Properties;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.PropertyResourceConfigurer;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.support.PropertiesLoaderSupport;
public class SpringPropertyResourceReader {
	private static ApplicationContext applicationContext=new 
	ClassPathXmlApplicationContext("applicationContext.xml");
	private static AbstractApplicationContext abstractContext =
	(AbstractApplicationContext) applicationContext;
	private static Properties properties=new Properties();
	static{
		try{
			// get the names of BeanFactoryPostProcessor
			String[] postProcessorNames = abstractContext
					.getBeanNamesForType(BeanFactoryPostProcessor.class,true,true);
			
			for (String ppName : postProcessorNames) {
				// get the specified BeanFactoryPostProcessor
				BeanFactoryPostProcessor beanProcessor=
				abstractContext.getBean(ppName, BeanFactoryPostProcessor.class);
				// check whether the beanFactoryPostProcessor is 
				// instance of the PropertyResourceConfigurer
				// if it is yes then do the process otherwise continue
				if(beanProcessor instanceof PropertyResourceConfigurer){
					PropertyResourceConfigurer propertyResourceConfigurer=
							(PropertyResourceConfigurer) beanProcessor;
					
					// get the method mergeProperties 
					// in class PropertiesLoaderSupport
					Method mergeProperties=PropertiesLoaderSupport.class.
						getDeclaredMethod("mergeProperties");
					// get the props
					mergeProperties.setAccessible(true);
					Properties props=(Properties) mergeProperties.
					invoke(propertyResourceConfigurer);
					
					// get the method convertProperties 
					// in class PropertyResourceConfigurer
					Method convertProperties=PropertyResourceConfigurer.class.
					getDeclaredMethod("convertProperties", Properties.class);
					// convert properties
					convertProperties.setAccessible(true);
					convertProperties.invoke(propertyResourceConfigurer, props);
					
					properties.putAll(props);
				}
			}
			
		}catch(Exception e){
			throw new RuntimeException(e);
		}
	}
	
	public static String getProperty(String propertyName){
		return properties.getProperty(propertyName);
	}
}

测试代码Main.java
package main;

import utils.SpringPropertyResourceReader;
public class Main {
	public static void main(String[] args) throws Exception {
		System.out.println(SpringPropertyResourceReader.getProperty("name"));
		System.out.println(SpringPropertyResourceReader.getProperty("birthday"));
	}
}
分享到:
评论

相关推荐

    Spring中PropertyPlaceholderConfigurer的使用

    Spring 中 PropertyPlaceholderConfigurer 的使用 PropertyPlaceholderConfigurer 是 Spring 框架中的一个重要组件,用于加载和管理 Properties 文件。它能够将 Properties 文件中的键值对注入到 Spring 的 bean 中...

    Spring属性占位符PropertyPlaceholderConfigurer的使用

    在Spring框架中,属性占位符`PropertyPlaceholderConfigurer`是一个重要的工具,用于处理配置文件中的属性值引用。它使得我们可以在XML配置文件中使用占位符`${...}`来引用外部属性文件中的值,从而使应用配置更加...

    Spring PropertyPlaceholderConfigurer配置文件加载器集成ZooKeeper来实现远程配置读取

    在Spring中,`PropertyPlaceholderConfigurer`是一个非常重要的类,它用于处理属性文件中的占位符,将它们替换为实际的值。这在配置管理中起到了关键作用,特别是在大型分布式系统中,动态配置管理变得尤为重要。...

    org.springframework.beans.factory.config.PropertyPlaceholderConfigurer

    深入阅读这两份文档,可以帮助你更全面地理解和掌握Spring中属性管理的技巧。 总之,`org.springframework.beans.factory.config.PropertyPlaceholderConfigurer`是Spring框架中一个核心的配置组件,它简化了应用...

    在Spring中使用加密外部属性文件

    在Spring框架中,属性文件是配置关键信息的常用...通过这种方式,你可以在Spring中安全地使用外部属性文件,同时满足系统的安全需求。这种做法不仅可以提高应用的可维护性和部署效率,还能保护敏感信息,降低安全风险。

    Spring如何使用PropertyPlaceholderConfigurer读取文件

    Spring框架中,PropertyPlaceholderConfigurer是一个非常重要的组件,它可以帮助我们读取配置文件,实现系统的配置信息统一管理。在大型项目中,我们往往会将配置信息配置在一个cfg.properties文件中,然后在系统...

    spring使用属性文件

    下面将详细介绍如何在Spring中使用属性文件以及相关知识点。 1. **属性文件格式** 属性文件通常以`.properties`为扩展名,例如`application.properties`或`database.properties`。文件中的键值对以等号`=`分隔,如...

    Spring-Reference_zh_CN(Spring中文参考手册)

    5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建的PropertyEditor实现 5.4.2.1. 注册用户自定义的PropertyEditor 6. 使用Spring进行面向切面编程(AOP) 6.1. 简介 6.1.1. AOP概念 6.1.2. Spring AOP的功能和目标 ...

    关于spring系统中多系统的配置

    #### Spring中的PropertyPlaceholderConfigurer类 在Spring框架中,`PropertyPlaceholderConfigurer`是一种特殊的Bean,它被用来处理Spring配置文件中的占位符(placeholder),并将它们替换为具体的值。这些值通常...

    spring,配置文件从属性文件读取JDBC连接的相关参数

    以下是如何在Spring中从这个文件中读取这些参数的步骤: 1. **创建属性文件**: 首先,我们需要创建一个名为`jdbc.properties`的文件,通常放在项目的`src/main/resources`目录下,以便在运行时被自动加载。该文件...

    说说在Spring中如何引用外部属性文件的方法

    在 Spring 框架中,引用外部属性文件是一种常见的配置方式,这种方式可以将配置信息抽取到一个独立的文件中,使得配置更加灵活和简洁。今天,我们将讨论如何在 Spring 中引用外部属性文件的方法。 为什么需要引用...

    Spring中属性文件properties的读取与使用详解

    本文将详细介绍如何在Spring中读取和使用这些属性文件。 首先,属性文件通常位于项目的资源目录下,例如`/WEB-INF/configInfo.properties`。这个文件包含了一系列键值对,如邮件发送的相关配置: ```properties # ...

    4.Spring应用扩展.pptx

    在Spring中,我们通常会在XML配置文件中定义Bean及其属性。然而,为了更好地管理和组织配置,我们可以采用多种方法来扩展配置。例如,可以将数据库连接信息写入属性文件,如`database.properties`,然后在Spring配置...

    Spring动态加载配置文件

    `PropertyPlaceholderConfigurer`是Spring早期版本中处理属性文件的工具,而`@PropertySource`则是从Spring 3.1引入的新特性,它们都可以用来从外部属性文件中读取值并注入到bean中。 1. `...

    spring2.5 配置VM

    在Spring框架中,VM选项通常指的是在应用启动时传递给Java虚拟机的一系列系统属性,它们可以影响Spring应用的行为或配置。这些选项可能包括日志级别、类路径设置、服务器端口等。 首先,我们需要理解Spring的配置...

    spring02-6

    在Spring中,我们可以通过以下两种方式来读取并注入这些属性值: 1. **使用`@Value`注解**: `@Value`注解可以直接将属性值注入到字段或方法参数中。例如,如果我们要注入`database.url`,可以在类中声明一个字段...

    spring中 连接池的使用

    当切换到C3P0时,首先引入了`PropertyPlaceholderConfigurer`来加载`jdbc.properties`文件,这样可以将敏感信息(如用户名、密码和连接池配置)存储在外部文件中,而不是硬编码在XML配置中。然后,配置了`...

    第十九章 Spring Environment 抽象(Environment Abstraction)1

    Spring Environment 抽象是Spring框架中的一个重要组成部分,它为应用程序提供了环境相关的配置信息,包括属性值的占位符处理、类型转换以及条件化的Bean装配管理。这一抽象在Spring 3.1版本中引入,旨在统一处理...

    Spring 容器后处理器

    `PropertyPlaceholderConfigurer`是一个常用的容器后处理器,它的主要作用是从外部的属性文件中读取配置信息,并将这些配置信息插入到BeanFactory的定义中。这使得可以在不修改主配置文件的情况下更改某些配置值,如...

Global site tag (gtag.js) - Google Analytics