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, .......}
- Spring 中如何向 Bean 注入系统属性或环境变量
- Spring中如何向 Bean注入系统属性或环境变量
- Spring 中如何向 Bean 注入系统属性或环境变量
- Spring中如何向Bean注入系统属性或环境变量
- Spring+Servlet整合(如何向Servlet注入属性(转),servlet获取spring容器中的bean)
- 如何注入值到Spring bean属性
- Spring中Bean的简单属性注入
- Spring中Bean的复杂属性注入
- [Spring] 注入Bean属性
- Spring强制向servlet中注入bean的方法
- 【Spring强制向servlet中注入bean的方法】
- spring bean setter属性注入
- spring bean setter属性注入
- Spring配置文件中注入环境变量或其他配置文件变量
- Spring中Bean属性为集合的注入方式
- 五、Spring容器中Bean的属性值的注入
- Spring boot将配置属性注入到bean类中
- 学习笔记——Spring 中Bean属性的注入
- UIDevicePlatform 设备
- 我们编程吧 之 C++学习手册v0.1
- CentOS6.5安装最新版 firefox
- JSON解析之Json-lib
- DLL文件生成 预编译代码
- Spring 中如何向 Bean 注入系统属性或环境变量
- Nginx在Window下的使用笔记
- Linux-非结构化数据同步-Linux下实现非结构化数据同步的介绍1
- object类
- 前台删除多行记录,并传递到后台
- 单件模式(单例模式)
- ORACLE多表关联UPDATE 语句
- 在Ubuntu 14.04.1中安装VMware Tools的步骤
- 自定义下拉刷新上拉加载动画