欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

spring注解:@Value在使用中遇到的问题

程序员文章站 2022-07-08 11:06:25
...

最近试着搭了一个spring+springmvc+mybatis+activiti的框架,遇到了不少问题。自己也学习了很多资料。在此记录下关于@Value使用过程中的一些问题。

关于spring中@Value的使用,我主要是用来便捷地引用属性文件的键值。使用方法,网上有很多相关文章,略做整理,大致用法如下:

1、在spring的配置文件中申明spring加载属性文件的bean。需要指明属性文件的具体位置:

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

 这是我在网上看到的做法。

我使用的是另外一种,使用context标签,感觉更简洁,如下:

<context:property-placeholder location="classpath:resources.properties"/>

 2、以上是通过spring来加载属性文件的声明,接下来是使用。通过@Value注解。似乎也有两种方式,第一种:

	@Value("${document.location}")
	private String filePath;

 document.location为.properties中的属性名。注解为变量filePath赋属性值,有个问题是,我并没有在此类中添加set方法。

还有一种方式如下:

@Value("#{configProperties['document.location']}")  
private String filePath;

 

 configProperties为spring处理属性文件的bean的id。不知道这个说法对不对。

上面其实都不是我想说的东西。我想说的是我tm取值取不出来啊!!要么是null:在mvc的配置文件中有用“${}”来取值,取到的是${document.location}字符串。要么是在代码中用@Value("${document.location}")来取值,取到为null;

 

 

又综合了下各位大神的文章。

取值为null,有如下原因:

1、使用static或final修饰了tagValue,也就是说我的”filePath“变量是不能被static、final修饰的。

2、”filePath“变量所在的类必须是spring管理的类。比如加了@Component注解。

3、”filePath“变量所在的类实例对象不能是被new出来的。其实同上面一点原理一样。

参考链接:http://blog.csdn.net/zzmlake/article/details/54946346

 

但是…………以上都不是我所遇到的啊。

 

没办法,老老实实回头看自己的配置文件,突然发现,在context(spring容器)配置文件中通过"${}"取值是完全正常的。放到mvc(mvc容器)配置文件中就不得行了。而我的

<context:property-placeholder location="classpath:resources.properties"/>

是写到spring容器的配置中的。按理说mvc继承自context(不知道这个说法对不),应该也能取才对。

但是,在我往mvc容器的配置中加了如上配置后,取值就正常了。我也很无奈啊。

不知道有没有标准的统一的做法。还望大神留言。

 

 

相关标签: spring @Value