`

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

阅读更多

最近试着搭了一个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容器的配置中加了如上配置后,取值就正常了。我也很无奈啊。

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

 

 

分享到:
评论
1 楼 mumume123 2017-11-07  
发现了一篇文章解决困惑
http://powertech.iteye.com/blog/2291935

相关推荐

    spring-demo13-注解-@Value.zip

    在Spring框架中,`@Value`注解是一个非常实用的工具,它允许我们在bean的属性或者方法参数中直接注入配置属性值,极大地提高了代码的可读性和灵活性。本项目"spring-demo13-注解-@Value.zip"显然是一个关于如何使用`...

    基于Spring boot @Value 注解注入属性值的操作方法

    在Bean中使用`@Value`注解可以直接获取这些属性值: ```java @RestController public class ValueController { @Value("${user.name}") private String name; @Value("${user.password}") private String ...

    Spring Boot技术知识点:如何理解@Value注解

    在Spring Boot框架中,`@Value`注解是Spring的核心组件之一,用于注入配置属性值到Bean中。这个注解提供了灵活的方式,让我们能够从不同的来源(如.properties或.yml文件,环境变量,命令行参数等)获取并注入值。...

    static静态变量使用@Value注入方式.md

    然而,在实际应用中,如果尝试将`@Value`注解应用于静态变量,则会遇到问题。本文将详细介绍如何正确地使用`@Value`注解来为静态变量赋值。 #### 二、背景知识 在深入了解如何使用`@Value`注解给静态变量赋值之前...

    Springboot中@Value的使用详解

    在Springboot中,@Value注解广泛应用于将配置文件中的属性注入到Controller、Service、Configuration、Component等Spring托管的类中。下面是@Value注解的详细使用介绍: 1. 普通字符串注入 在配置文件中,我们可以...

    Spring Boot系列四 Spring @Value 属性注入使用总结一

    Spring Boot系列四 Spring @Value 属性注入使用总结一

    Spring @Value注解失效问题解决方案

    但是,在实际开发中,我们经常会遇到@Value注解失效的问题。这篇文章将会详细介绍Spring @Value注解失效问题的解决方案。 二、@Value注解失效原因分析 在分析@Value注解失效的原因之前,我们首先需要了解@Value...

    Spring注解 - 52注解 - 原稿笔记

    在火狐中显示可能会有问题,大家都是程序员,改个参数就好啦 注解包含: 拦截器 , 过滤器 , 序列化 , @After , @AfterReturning , @AfterThrowing , @annotation , @Around , @Aspect , @Autowired , @Bean , @Before ,...

    SpringValue注解

    2. @Value 注解只能在 Spring 管理的 Bean 中使用,在非 Spring 管理的工具类中,无法使用 @Value 注解来读取配置文件。这种情况下,需要使用静态方法来读取配置文件。 使用 @Value 注解的优点 使用 @Value 注解...

    spring注解出现中文乱码

    综上所述,解决Spring框架中使用注解处理JSON数据时出现中文乱码的问题主要涉及三个方面的内容:明确客户端和服务端之间的字符集编码、检查并修正XML配置文件以及引入必要的依赖库。通过对这些问题的细致分析和合理...

    java中的@Value获取不到配置文件的值,也加载不到默认值

    自己开发一个工具类,为第三方应用提供调用接口,但是打包后测试过程中,发现了一个问题就是在用@Value获取配置文件内容的时候,无法获取我们的配置信息,也无法加载我们配置的默认值!具体配置如下: @Value("${...

    示例代码-SpringBoot踩坑记录:玩转@Value注解-自定义PropertySourcesPlaceHolderConfigurer.zip

    在Spring Boot应用中,`@Value`注解是开发者经常使用的工具,用于注入配置属性值。这个注解可以从`application.properties`或`application.yml`等配置文件中读取值,并将其注入到字段、方法参数或者构造函数参数中。...

    spring中@value注解需要注意的问题

    在Spring框架中,`@Value`注解是一个非常实用的功能,用于从属性文件或表达式语言(SpEL)中注入值到字段、方法参数或构造函数参数中。然而,在使用`@Value`时,需要注意一些关键问题以确保正确地配置和使用。下面将...

    在非spring注解类中使用spring容器中的bean_普通类中使用yml配置文件中的配置信息

    然而,在某些情况下,我们可能需要在非Spring注解的类中访问Spring容器中的Bean,或者在这些类中使用YAML配置文件中的配置信息。本篇将详细介绍如何在这样的场景下实现这一目标。 首先,让我们来理解如何在非Spring...

    关于Spring中@Async注解使用

    Spring 中 @Async 注解的使用 @Async 注解是 Spring 框架提供的一种异步执行方法的实现方式,从 Spring 3.0 版本开始提供。使用 @Async 注解可以将方法标识为异步方法,通过 SimpleAsyncTaskExecutor 执行,但不...

    Spring EL表示式的运用@Value说明

    在 Spring 框架中,我们可以使用 @Value 注解来实现资源的注入。@Value 注解可以用来注入各种类型的资源,包括字符串、数字、布尔值、对象等。 在示例代码中,我们可以看到使用 @Value 注解来实现资源的注入,例如...

    Spring MVC 的注解使用实例

    在Spring MVC框架中,注解的使用极大地简化了配置,提高了开发效率。Spring MVC通过注解可以实现控制器、方法映射、模型数据绑定、视图解析等关键功能。本实例将深入探讨Spring MVC中常见的注解及其应用。 1. `@...

    Spring 注解 小例子

    Spring注解的主要目的是消除XML配置文件,使开发者能够通过在类或方法上直接添加注解来声明对象及其依赖关系。这个小例子将深入探讨Spring框架中的主要注解及其用法。 1. `@Component`、`@Service`、`@Repository` ...

    Spring @value和@PropertySource注解使用方法解析

    例如,在上面的示例代码中,我们使用 @Value 注解将字符串 "猫" 注入到 Cat 类的 name 属性中,因此,在 Demo 类中的 main 方法中,我们可以使用 System.out.println 语句来输出 Cat Bean 的信息。 @Value 注解和 @...

    Spring注解之@Lazy注解使用解析

    Spring注解之@Lazy注解使用解析 @Lazy注解是Spring框架中的一种注解,用于指定Bean的预初始化行为。该注解可以修饰Spring Bean类,用于指定该Bean是否取消预初始化。在使用该Annotation时,可以指定一个boolean型的...

Global site tag (gtag.js) - Google Analytics