@Controller 类中的 Spring @Value 注释未评估属性文件中的值

新手上路,请多包涵

我是 Spring 的新手,并尝试使用 @Value("${loginpage.message}") 注释在控制器内部注入一个带有值的字符串,该控制器用 @Controller 注释进行注释,并且我的字符串的值被评估为字符串 "${loginpage.message}" 而不是我的属性文件中的内容。

下面是我的控制器,其中包含我要注入的字符串“消息”。

 @Controller
public class LoginController extends BaseController {
    @Value("${loginpage.message}")
    private String message;

    @RequestMapping("/")
    public String goToLoginPage(Model model) {
        model.addAttribute("message", message);

        return "/login";
    }
}

我的应用程序上下文如下所示:

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

<context:annotation-config />

<context:component-scan base-package="com.me.application" />

我的属性文件包含以下行:

 loginpage.message=this is a test message

Spring 必须在某个时候获取该值,因为每当我将 @Value("${loginpage.message}") 更改为不在属性文件中的值,如 @Value("${notInPropertiesFile}") ,我都会收到异常。

原文由 Chris 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 624
2 个回答

看来这个问题已经被问过了 Spring 3.0.5 doesn’t evaluate @Value annotation from properties

Web 应用程序根目录和 servlet 应用程序上下文之间的区别是 Spring 中最容易混淆的来源之一,请参阅 Spring Framework 中的 applicationContext.xml 和 spring-servlet.xml 之间的区别

来自 @Value javadoc:

请注意,@Value 注释的实际处理是由 BeanPostProcessor 执行的

来自 Spring 文档:

BeanPostProcessor 接口是按容器划分的。这仅在您使用容器层次结构时才有意义。如果您在一个容器中定义一个 BeanPostProcessor,它只会在该容器中的 bean 上工作。在一个容器中定义的 Bean 不会由另一个容器中的 BeanPostProcessor 进行后处理,即使两个容器都属于同一层次结构。

原文由 Boris Treukhov 发布,翻译遵循 CC BY-SA 3.0 许可协议

是的,我在使用 Spring 3 时遇到了同样的问题。它似乎在控制器内部不起作用。为了解决这个问题,我用 @Service 创建了另一个 bean 并将其注入到控制器中。它确实对我有用。希望这对我花了一整天的时间来弄清楚的人有所帮助。

原文由 tn.stackoverflow 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题