Spring @Value无法获取系统属性

时间:2014-05-01 18:34:03

标签: java spring

import org.springframework.beans.factory.annotation.Value;

public class PropertyReader {
    @Value("${spring.active.profiles")
    private String profile;

    @Nonnull
    public String getProfile() {
        return profile;
    }
}

这是我的测试

public class PropertyReaderTest {

    @Test
    public void testGetProfile() throws Exception {
        System.out.printf(System.getProperty("spring.active.profiles"));
        assertEquals("development", new PropertyReader().getProfile());
    }
}

我的依赖是

<dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.0.3.RELEASE</version>
        </dependency>
    </dependencies>

我看到了

development
java.lang.AssertionError: 
Expected :development
Actual   :null

2 个答案:

答案 0 :(得分:0)

Yuo应该在类PropertyReader上放置@Service,或者你应该使用XML spring文件来定义bean并让它弹出来定义属性

答案 1 :(得分:0)

首先我假设你的语法是正确的,并且你发布的@value的类型错误。

 @Value("${spring.active.profiles}")

现在要使用@value,必须将类注册为spring bean,并且仅使用注释。即使你使用xml注册类,你的@value也行不通。

并且使用弹簧容器进行bean自动注入,不要使用new创建对象。

解决上述问题

1)

@Component
PropertyReader 

使用@Component将类PropertyReader作为spring bean。

2)从测试类中的应用程序上下文加载bean,不要使用new来创建它。