spring入门(二)【加载properties文件】
在开发过程当中需要用到配置信息,这些信息不能进行硬编码,这时配置文件是一个比较好的方式,java提供了properties格式的文件,以键值对的方式保存信息,在读取的时候通过键获得键对应的值,spring提供了读取properties文件的支持,下面看具体的配置,
一、
在项目中经常用到数据库连接,连接数据库需要一些参数: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的配置文件中有
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
在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
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> classpath:quartz.properties classpath:db.properties
使用这种方式可以指定多个文件,只要配置多个
三、PropertiesFactoryBean类
可以配置此类,如下,
class="org.springframework.beans.factory.config.PropertiesFactoryBean">
classpath:quartz.properties
classpath:db.properties
要使用这种方式加载的properties文件,需要使用#{beanId['键']},如上面的,#{configProperties['db.url']}使用这种方式便可以得到db.url的值,
如,数据库连接中,
class="org.springframework.jdbc.datasource.DriverManagerDataSource"> ${db.driver} #{configProperties['db.url']} #{configProperties['db.username']} 123456
上面的方式混合使用了${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的内容就说那么多;其中源码还得继续研究呢。
有不正之处欢迎指出,谢谢!