为什么无法导入属性文件

时间:2014-08-25 17:17:58

标签: java spring spring-mvc properties

属性文件为src\main\resources\exam-binary.properties。 exam-binary.properties中的内容是:

user.post.url=http://localhost:9000/users/newUser

导入类如下所示,但似乎无法导入该值。

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.web.client.RestTemplate;

import com.ma2oo.model.domain.User;

@Configuration
@PropertySource("classpath:exam-binary.properties")
public class RegisterUser {
    private static final RestTemplate restTemplate = new RestTemplate();

    @Value("${user.post.url}")
    private String registerUrl;

    public User Register(final User user) {
        System.out.println("url print: " + registerUrl);
        return restTemplate.postForObject(registerUrl, user, User.class);
    }
}

我有@EnableAutoConfiguration,涵盖所有课程。调用RegisterUser的方法是:

@RequestMapping(value = {"/signUp"}, method = RequestMethod.POST)
public ModelAndView signUp(@ModelAttribute("user") User user) {
    new RegisterUser().Register(user);
    return new ModelAndView("quiz_start");
}

标准输出是:

url print: null

有人可以帮助解释为什么@PropertySource不起作用吗? 提前谢谢。

1 个答案:

答案 0 :(得分:2)

根本原因是您使用的RegisterUser实例不是Spring托管bean。相反,你自己创建了

new RegisterUser() // spring has no knowledge of it

为什么这个班级是Configuration班级?您似乎将其用作服务。将属性配置移动到适当的@Configuration类,声明类型为RegisterUser的bean,并在@RequestMapping带注释的方法中使用该bean。