在开发过程当中需要用到配置信息,这些信息不能进行硬编码,这时配置文件是一个比较好的方式,java提供了properties格式的文件,以键值对的方式保存信息,在读取的时候通过键获得键对应的值,spring提供了读取properties文件的支持,下面看具体的配置,

一、<context:property-placeholder location=""/>标签

在项目中经常用到数据库连接,连接数据库需要一些参数:driver、url、username、password,这些信息通常保存在properties文件中,如,在我的项目src目录下有db.properties文件,文件内容,

db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://192.168.8.32:3306/test
db.username=root
db.passwd=root

现在要使用spring加载此文件,我们看spring如何配置,在spring的配置文件中有<context:property-placeholder location="classpath:db.properties"/>标签,此标签支持单个文件的加载,不过可以使用通配符,如,classpath:db*.properties,这里指定了src下的db.properties文件,那么如何使用加载的文件呢,可以使用${db.driver},下面看一个在数据库连接池中使用的例子,

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${db.driver}"></property>
<property name="url" value="${db.url}"></property>
<property name="username" value="${db.username}"></property>
<property name="password" value="${db.passwd}"></property>
</bean>

在spring的配置文件中可以使用上面的方式获得db.properties文件中的值,

那么,现在我要在java类中使用db.properties文件中的值呢,可以使用@Value("${db.driver}"),使用这样一个注解别可以给类中的属性赋值,如下

package com.cn.study.day2;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class Configuration {
@Value("${db.driver}")
private String dbDriver;
@Value("${db.url}")
private String dbUrl;
@Value("${db.username}")
private String dbUsername;
@Value("${db.passwd}")
private String dbPasswd;
public String getDbDriver() {
return dbDriver;
}
public String getDbUrl() {
return dbUrl;
}
public String getDbUsername() {
return dbUsername;
}
public String getDbPasswd() {
return dbPasswd;
} }

这里把注解用在了属性上面,也可以用在setXXX方法上,下面是测试代码,

//cpac是ClassPathXmlApplicationContext的一个实例对象
Configuration con=(Configuration)cpac.getBean("configuration"); System.out.println(con.getDbDriver());
System.out.println(con.getDbUrl());
System.out.println(con.getDbUsername());
System.out.println(con.getDbPasswd());

打印结果如下,

com.mysql.jdbc.Driver
jdbc:mysql://192.168.8.32:3306/test
root
root

以上是在java类中使用properties文件的例子。
二、PropertyPlaceholderConfigurer类

配置PropertyPlaceholderConfigurer类的bean

<bean id="appProperty" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<array>
<value>classpath:quartz.properties</value>
<value>classpath:db.properties</value> </array>
</property>
</bean>

使用这种方式可以指定多个文件,只要配置多个<value>标签即可,这种方式和<context:property-placeholder location="classpath:db.properties"/>方式是一样的。使用方式和第一种是一致的。

<context:property-placeholder location="classpath:db.properties"/>和配置PropertyPlaceholderConfigurer类的方式在spring的配置文件中只有一个起作用,即,假如都配置了,只有最先配置的才会被配置文件加载到,因为spring容器采用反射扫描机制,如果已经有一个PropertyPlaceholderConfigurer类的实例,那么就不会再创建了,因此使用其中一种方式即可

三、PropertiesFactoryBean类

可以配置此类,如下,

<bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="locations">
<list>
<value>classpath:quartz.properties</value>
<value>classpath:db.properties</value>
</list>
</property>
</bean>

要使用这种方式加载的properties文件,需要使用#{beanId['键']},如上面的,#{configProperties['db.url']}使用这种方式便可以得到db.url的值,

如,数据库连接中,

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>${db.driver}</value>
</property>
<property name="url">
<value>#{configProperties['db.url']}</value>
</property>
<property name="username">
<value>#{configProperties['db.username']}</value>
</property>
<property name="password">
<value>123456</value>
</property>
</bean>

上面的方式混合使用了${db.driver}和#{configProperties['db.url']}的方式,这两种方式都是可以的,

在java代码中的使用方式也是使用注解@Value,但是值是#{configProperties['db.url']},Z@Value("#{configProperties['db.url']}"),如下,

@Value("#{configProperties['db.username']}")
private String dbUsername;

此注解用在setXXX方法上也是可以的。

上面是三种spring加载properties文件的方式,有人会问,为什么在配置时使用了locations、location这样的属性呢,下面是一个有关properties的UML类图,

这个类图说明了各个类之间的继承关系,其中locations、location都是在共同的父类PropertiesLoaderSupport中定义的,这是一个抽象类。

好了,关于spring加载properties的内容就说那么多;其中源码还得继续研究呢。

有不正之处欢迎指出,谢谢!

spring入门(二)【加载properties文件】的更多相关文章

  1. spring 如何动态加载properties文件的内容

    1. 在xml中配置你的properties路径: <bean id="messageSource" class="org.springframework.cont ...

  2. Spring -09 -在Spring工程 中加载 properties 文件 -为某个属性添加注解赋初值

    1.在src 下新建 xxx.properties 文件,不要任意加空格,注明jdbc等标识名!2.在spring 配置文件中先引入xmlns:context,在下面添加2.1如果需要记载多个配置文件 ...

  3. spring配置数据源(加载properties文件)

    1.在spring中引入properties配置文件需要引入context的命名空间和真实地址 2.然后加载文件 需要注意的是这是采用的是set注入方式,所以name属性值必须是连接池set方法名去掉 ...

  4. Spring加载properties文件的属性的值

    要使用配置文件的值首先在spring.xml配置加载properties文件 <context:property-placeholder location="classpath:ife ...

  5. Spring加载properties文件的两种方式

    在项目中如果有些参数经常需要修改,或者后期可能需要修改,那我们最好把这些参数放到properties文件中,源代码中读取properties里面的配置,这样后期只需要改动properties文件即可, ...

  6. JavaEE互联网轻量级框架整合开发(书籍)阅读笔记(12):XML配置自动扫描包,自动加载*.properties文件

    一.XML和注解组合使用 前几篇的测试案例都是在Java类中配置,现在换一种使用方式,在XML中配置,使Spring IoC容器在启动之后自动去扫描配置的包路径,扫描加载指定路径下的propertie ...

  7. xml文件 加载properties文件的两种方法与注意事项

    1.遇到的问题: 配置redisSpringContext.xml 时,遇到 properties加载失败,提示BeanDefinitionStoreException  和   java.lang. ...

  8. Java开发学习(八)----IOC/DI配置管理第三方bean、加载properties文件

    前面的博客都是基于我们自己写的类,现在如果有需求让我们去管理第三方jar包中的类,该如何管理? 一.案例:数据源对象管理 本次案例将使用数据源Druid和C3P0来配置学习下. 1.1 环境准备 学习 ...

  9. java加载properties文件的六中基本方式实现

    java加载properties文件的方式主要分为两大类:一种是通过import java.util.Properties类中的load(InputStream in)方法加载: 另一种是通过impo ...

随机推荐

  1. Atitit ACID解决方案2PC(两阶段提交)  跨越多个数据库实例的ACID保证

    Atitit ACID解决方案2PC(两阶段提交)  跨越多个数据库实例的ACID保证 1.1. ACID解决方案1 1.2. 数据库厂商在很久以前就认识到数据库分区的必要性,并引入了一种称为2PC( ...

  2. iOS-----用LLDB调试,让移动开发更简单(二)

    image lookup –address 当我们有一个地址,想查找这个地址具体对应的文件位置,可以使用image lookup --address,简写为image lookup -a e.g: 当 ...

  3. 为什么获取的System.Web.HttpContext.Current值为null,HttpContext对象为null时如何获取程序(站点)的根目录

    ASP.NET提供了静态属性System.Web.HttpContext.Current,因此获取HttpContext对象就非常方便了.也正是因为这个原因,所以我们经常能见到直接访问System.W ...

  4. 开发工程师面试的秘密( 整理自 Export C Programming )

    开发工程师面试的秘密 因为打算转战linux平台,所以一直在配置自己喜欢的linux操作系统.同时在看那本<C 专家编程>,这本书主要是针对ANSI C 介绍的,所以和Linux(Unix ...

  5. 深入理解PHP内核(十二)函数-函数的定义、传参及返回值

    原文链接:http://www.orlion.ga/344/ 一.函数的定义 用户函数的定义从function 关键字开始,如下 function foo($var) {    echo $var; ...

  6. Pillow实现图片对比

    在编写Web自动化测试用例的时候,如何写断言使新手不解,严格意义上来讲,没有断言的自动化脚本不能叫测试用例.就像功能测试一样,当测试人员做了一些操作之后必然会判断实际结果是否等于预期结果,只不过,这个 ...

  7. Webydo:一款在线自由创建网站的 Web 应用

    Webydo 是一款专业的在线建站应用,使平面设计师可以创建和管理 HTML 网站,而无需编写代码.设计人员可以设计任何类型网站,只需要点击按钮,就能够发布先进的 HTML 网站. 你可以控制所有的设 ...

  8. iOS-地图报错超出了经纬度范围Invalid Region

    做地图定位的时候,使用一下代码 // 经纬度 CLLocationDegrees latitude = [storeDict[@"lat"] doubleValue]; CLLoc ...

  9. Mac删除JDK

    安装了1.6以后,没有安装1.7发现Android Studio报错: invalid source release: JDK 1.7 原因是Android Studio需要1.7以上的版本,结果再次 ...

  10. log4net 中错误 System.Web.HttpException (0x80004005): 文件不存在

    用日志组件,Global 中配置的输出最后一个错误信息,总是出现下面的错误信息: 2014-04-01 14:35:41,757 级别:ERROR 信息:[Exception]:System.Web. ...