Spring 中如何向 Bean 注入系统属性或环境变量

来源:互联网 发布:单片机实现呼吸灯 编辑:程序博客网 时间:2024/06/05 03:29

在 Spring 中为 javabean 注入属性文件中的属性值一般人都知道的,可以通过 org.springframework.beans.factory.config.PropertyPlaceholderConfigurer 引入一个属性文件,然后给 bean 指定属性的时候就可以用 ${jdbc.url} 方式赋值了。比如在 Spring 中是这样的配置:

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

  <property name="locations">       

  <list>             

       <value>classpath:jdbc.properties</value>       

  </list>     

</property>

 </bean>  

 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"    destroy-method="close">   

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

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

</bean> 

bean 赋上系统属性(System.getProperties() ) 中的值或环境变量(System.getenv() ) 中的值,根据程序所处的环境产生不同的行为,这样我们无法事先在某个 properties 文件预先设定好值的。

用 PropertyPlaceholderConfigurer 来读取属性文件,有两个子类:

org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer

org.springframework.web.context.support.ServletContextPropertyPlaceholderConfigurer

前面那个应该是从系统配置或注册表里要属性,后面的可以从 ServletContext 取相关属性值。

org.springframework.beans.factory.config.PropertyPlaceholderConfigurer 的 JavaDoc API 就会发现,它不光能从属性文件里取值,也能从系统属性,甚至是环境变量中取值。


public void setSystemPropertiesMode(int systemPropertiesMode)


public void setSearchSystemEnvironment(boolean searchSystemEnvironment)


从把系统属性 user.dir 和环境变量 COMPUTERNAME 注入到 javabean


要被注入系统属性和环境变量的 Bean

 /** 

 通过 Spring 来向其中注入系统属性 workDir(${user.dir}, System.getProperty(""))  * 和环境变量 hostName(${COMPUTERNAME}, System.getenv().get("COMPUTERNAME"));  

 *  */

public class Environments {     

private String workDir;    

private String hostName;       

public String getHostName() {        

 return hostName;    

 }       

public void setHostName(String hostName) {   

      this.hostName = hostName; 

    }    

 public String getWorkDir() {       

  return workDir;     

}      

 public void setWorkDir(String workDir) { 

        this.workDir = workDir; 

    }

. Spring 配置文件

<?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 id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/>     

  <bean id="env" class="cc.unmi.spring.Environments">       

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

       <property name="hostName" value="${COMPUTERNAME}"/>  

   </bean>

 </beans> 

测试客户端代码

 import org.springframework.beans.factory.BeanFactory;

import org.springframework.context.support.ClassPathXmlApplicationContext;  

import cc.unmi.spring.Environments;   

/**  * 测试客户端  *   */

public class TestClient {      

public static void main(String[] args) {         

BeanFactory context = new ClassPathXmlApplicationContext("applicationContext.xml");      

Environments env = context.getBean(Environments.class);        

System.out.println("Working directory: " + env.getWorkDir());        

System.out.println("Host name: " + env.getHostName());           

执行上面的 TestClient 后控制台下输出的结果是:

Working directory: D:\workspaces\j2ee\TestSpring

Host name: Unmi-Computer

这显示了 Spring 已成功向 Environments 注入了系统属性 user.dir 和环境变量 COMPUTERNAME。

注:你可以用 System.getProperties().list(System.out) 打印出系统属性,还不知道系统中可用哪个命令查得到其中的值:显示出来是这样的:

-- listing properties --

java.runtime.name=Java(TM) SE Runtime Environment

sun.boot.library.path=C:\Program Files\Java\jre6\bin

java.vm.version=17.1-b03

java.vm.vendor=Sun Microsystems Inc.

java.vendor.url=http://java.sun.com/

path.separator=;

java.vm.name=Java HotSpot(TM) Client VM

file.encoding.pkg=sun.io

user.country=US

...................................

环境变量可以用 System.out.print(System.getenv()) 打印出来,对应着 Windows 中的 set 命令或 Linux  下的 env 输出的值,System.getenv() 是个 Map,所以打印出这样子的:

{USERPROFILE=C:\Documents and Settings\Unmi, JAVA_HOME=C:\Program Files\Java\jdk1.6.0_20, TEMP=C:\DOCUME~1\uqiu\LOCALS~1\Temp, OS=Windows_NT, COMPUTERNAME=Unmi-Computer, .......} 

0 0
原创粉丝点击