在spring 3中,新增了一个注解@value,通过它,我们可以很方便的加载项目中的 XXX.properties 属性文件(以下统称 属性文件),由于近期使用到了该注解,所以,特意在此记录一下,以便加强理解。
下面我们先来看看,spring 3.1官方文档中,关于value注解的解释。
首先我们看见的是,@value注解是位于spring 的org.springframework.beans.factory.annotation 下。
第二,我们看到了,它需要一个String 类型的value,在个人粗浅的理解下,这个value应该指的是,在注解里面所设定的要访问的属性文件的value值。
然后再看下面,就是获取value详情,从下面的例子来看,我上面关于vlaue的定义是正确的。在网上其他地方,我看见有小伙伴说,有两种读取属性文件,一种是像上面例子,“#{systemProperties.myProp}”,另外一种就是,将#换成"$"
的,”${systemProperties.myProp}”这种形式,对于他们的区别,大家可以自行了解下,我们在这里就只说“#{systemProperties.myProp}”这种形式。
要使用@value注解读取属性文件,首先你得在你的配置文件(spring配置文件)里面,加载你的属性文件,在这里我用的是 util:properties 来读取配置文件,想要使用它呢,就必须现在配置文件里面引用
<beans xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd">
</beans>
这些命名空间。
空间引用好了,就可以把你的属性文件配置进来,比如,我在WEB-INF的config文件夹下有一个名为user的属性文件,那么,我就在我的spring配置文件里这样配置。
<util:properties id="config" location="WEB-INF/config/user.properties"></util:properties>
这样配置完成之后,spring在ioc容器里会自动将该属性文件注册进来,然后,在你项目需要的地方,加上这个注解,就可以读取到属性文件里面的内容了。
@Value("#{config['com.chat.name']}")
private String name;
属性文件:
**user.properties**
com.chat.name= Jack
打印的内容是,
System.out.println("jdbc_url: "+name);
结果:jdbc_url: Jack
好啦,这就算是完成读取了!
当然,可能有人会问,如果我要读取多个属性文件呢?那该怎么处理呢?
不用担心,这里也有处理的方法!请接着往下看。
不就是多加一个util:properties标签嘛,有何难的。。。
是的,通过这个我们可以知道,一个util:properties标签只能加载一个属性文件,且该标签的id不能为空,且必须是唯一的,若有重复的话,则会后面加载的有值,前面加载的值为null。
属性文件:
**user.properties**
com.chat.name= Jack
**boss.properties**
boss.account= 41115794689333622**
配置文件:
<util:properties id="config" location="WEB-INF/config/user.properties"></util:properties>
<util:properties id="config" location="WEB-INF/config/boss.properties"></util:properties>
输出结果:
jdbc_url: null
boss_account:41115794689333622**
所以这一点大家要注意,不要落坑。
另外最后一点建议就是,属性的命名里最好不要带圆点,可以用下划线代替。
好啦,今天就写到这里,学无止境,生生不息。