【转】使用Spring注解方式注入properties文件内容,并配合Junit4+Spring做单元测试
先看看工作目录,然后再来讲解
1、建立config.properties,我的config.properties内容如下:
author_name=luolin
project_info=该项目主要是用于写一些demo
2、配置Spring配置文件,读取properties文件,并设置编码格式。大家从我的项目结构图中可以看到我用了两个Spring的配置文件,其实在spring-context.xml中没有配置其他内容,只是配置扫描com.eya.property这个包,大家可能会有疑问为何包的扫描不直接在spring-mvc.xml中配置成扫描com.eya就可以了。其实这是一个习惯问题,不同的东西做不同的事情,在 spring-mvc.xml中我只配置了去扫描com.eya.controller这个包。
<!-- 使用注解注入properties中的值 -->
<beanid="setting"class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<propertyname="locations">
<list>
<value>classpath:config.properties</value>
</list>
</property>
<!-- 设置编码格式 -->
<propertyname="fileEncoding"value="UTF-8"></property>
</bean>
3、编写和 config.properties文件中的值对应的ConfigProperty.java文件。加上注解@Comopnent("configProperty")将该类交给Spring容器管理,且指定该组件的名称为configProperty。
这里说明一下,在使用@Value 注解的时候,其内部的格式是#{beanID[propertyKey]},这里的beanID是在第二步中配置PropertiesFactoryBean的时候指定的id值,propertyKey是和config.properties中的key对应。
/**
*
*/
package com.eya.property;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
* config.properties文件映射类
* @author luolin
*
* @version $id:ConfigProperty.java,v 0.1 2015年8月7日 下午2:10:44 luolin Exp $
*/
@Component("configProperty")
public classConfigProperty{
/** 作者名字 */
@Value("#{setting[author_name]}")
private String authorName;
/** 项目信息 */
@Value("#{setting[project_info]}")
private String projectInfo;
/**
* @return the authorName
*/
public String getAuthorName() {
return authorName;
}
/**
* @param authorName the authorName to set
*/
public void setAuthorName(String authorName) {
this.authorName = authorName;
}
/**
* @return the projectInfo
*/
public String getProjectInfo() {
return projectInfo;
}
/**
* @param projectInfo the projectInfo to set
*/
public void setProjectInfo(String projectInfo) {
this.projectInfo = projectInfo;
}
}
4、编写单元测试,测试是否注入成功。这里用的是Junit4 + Spring注解的方式,当做是练习。
/**
*
*/
package com.eya.property;
import javax.annotation.Resource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
* JUnit4 + Spring 注解进行单元测试,测试通过Spring注解获得Properties文件的值
* @author luolin
*
* @version $id:ConfigPropertyTest.java,v 0.1 2015年8月7日 下午2:21:26 luolin Exp $
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:spring-mvc.xml","classpath:spring-context.xml"})
public class ConfigPropertyTest {
@Resource(name = "configProperty")
private ConfigProperty configProperty;
/**
* 测试Spring注解获取properties文件的值
*/
@Test
public void test() {
System.out.println(configProperty.getAuthorName());
System.out.println(configProperty.getProjectInfo());
}
}
运行结果如图:
相关推荐
在Spring Boot应用中,`@Value`注解是用于注入属性值的重要工具,它可以方便地从配置文件或者非配置文件中获取数据,并将其赋值给字段或者方法参数。本篇文章将详细阐述`@Value`注解的使用方法,包括如何注入配置...
Spring @Value注解失效问题解决方案 一、Spring @Value注解简介 在Spring框架中,@Value注解是一个非常重要的注解,它可以将属性文件中的值注入到Spring Bean中,使得配置更加灵活和灵活。但是,在实际开发中,...
在Spring Boot框架中,`@Value`注解是Spring的核心组件之一,用于注入配置属性值到Bean中。这个注解提供了灵活的方式,让我们能够从不同的来源(如.properties或.yml文件,环境变量,命令行参数等)获取并注入值。...
通过上述分析和示例,我们可以看到,在Spring框架中,虽然不能直接使用`@Value`注解为静态变量注入值,但可以通过定义一个非静态方法并使用`@Value`注解来间接实现这一目标。这种方法不仅避免了潜在的警告和错误,还...
Spring Boot系列四 Spring @Value 属性注入使用总结一
在Spring框架中,`@Value`注解是一个非常实用的工具,它允许我们在bean的属性或者方法参数中直接注入配置属性值,极大地提高了代码的可读性和灵活性。本项目"spring-demo13-注解-@Value.zip"显然是一个关于如何使用`...
Spring @Value 和 @PropertySource 注解使用方法解析 @Value 注解是 Spring 框架中用于将值注入到 Bean 中的注解。该注解可以用于注入基本字符串、EL 表达式、从配置文件读取数据等。例如,在上面的示例代码中,...
在Springboot中,@Value注解广泛应用于将配置文件中的属性注入到Controller、Service、Configuration、Component等Spring托管的类中。下面是@Value注解的详细使用介绍: 1. 普通字符串注入 在配置文件中,我们可以...
Spring Value 注解详解 Spring Value 注解是 Spring 框架中的一种重要注解,用于从 properties 文件中获取配置值。从 Spring 3 开始,Spring 框架支持使用 @Value 注解来简化读取配置文件的操作。 配置 properties...
在Spring框架中,`@Value`注解是一个非常实用的功能,用于从属性文件或表达式语言(SpEL)中注入值到字段、方法参数或构造函数参数中。然而,在使用`@Value`时,需要注意一些关键问题以确保正确地配置和使用。下面将...
这是因为 @Value 注解的生效需要 Bean 交给 Spring 进行管理,而不能使用 new 去实例化对象。 要使 @Value 生效,我们需要构建一个 Config 类: ```java @Configuration public class AConfig { @Bean(name="abc...
`@TypeDiscriminator` 和 `@JsonTypeInfo` 这两个注解分别来自Spring和Jackson库,它们用于解决序列化和反序列化过程中多态对象的处理问题。 首先,`@TypeDiscriminator` 是Spring Data JPA提供的一种注解,用于在...
在Spring Boot应用中,`@Value`注解是开发者经常使用的工具,用于注入配置属性值。这个注解可以从`application.properties`或`application.yml`等配置文件中读取值,并将其注入到字段、方法参数或者构造函数参数中。...
Spring 中 @Async 注解的使用 @Async 注解是 Spring 框架提供的一种异步执行方法的实现方式,从 Spring 3.0 版本开始提供。使用 @Async 注解可以将方法标识为异步方法,通过 SimpleAsyncTaskExecutor 执行,但不...
Spring Boot 使用 Value 注解给静态变量赋值的方法 在 Spring Boot 框架中,我们经常需要将配置文件中的值注入到静态变量中,但是默认情况下,Spring Boot 不支持将值注入到静态变量中。这是因为静态变量是属于类的...
- **自动装配候选列表**:可以使用`@Autowired`注解的`@Qualifier`注解的`value`属性,提供一个bean的名称列表,Spring会尝试从列表中找到匹配的bean。 ### 4. 配置控制 - **@Autowired注解的可选性**:使用`...
"Spring @Conditional注解原理解析" Spring @Conditional注解是 Spring 4 新提供的注解,主要用于...@Conditional 注解还可以与其他注解一起使用,例如 @Profile 注解、@Value 注解等,从而实现更加复杂的逻辑判断。
在Spring3.1以后增加了一项happy的技术点,就是基于注解来实现缓存的技术。他的本质上不是具体的缓存方案实现,而是一个对缓存的抽象,让我们通过注解,实现少量的代码,达到实现缓存的方案。 Cacheable的说明 @...
注解包含: 拦截器 , 过滤器 , 序列化 , @After , @AfterReturning , @AfterThrowing , @annotation , @Around , @Aspect , @Autowired , @Bean , @Before , @Component , @ComponentScan , @ComponentScans , @...
Spring @Async 注解引发其他注解失效的解决 Spring 框架提供了多种注解来帮助开发者简化代码,例如 @Async 用于异步执行方法、@Transaction 用于事务管理等。但是,在使用这些注解时,可能会遇到一些问题,例如 @...