当前位置: 首页 > 知识库问答 >
问题:

@Controller类中的Spring@Value注释未计算为属性文件中的值

吴正祥
2023-03-14

我是Spring新手,尝试在使用@controller注释的控制器内使用@value(${loginpage.message}”)注释注入一个字符串,并且我的字符串的值被评估为字符串“${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}))时,我都会得到一个异常。

共有3个答案

岳英耀
2023-03-14

您可以@Autowire-Environment然后环境。getProperty(“名称”)。看见https://stackoverflow.com/a/15562319/632293

燕元明
2023-03-14

是的,我对Spring3也有同样的问题。它似乎在控制器内部不起作用。为了解决这个问题,我用@Service创建了另一个bean,并将其注入控制器。它确实对我有用。希望这将有助于某人,因为我花了一整天的时间来解决它。

蓝夕
2023-03-14

这个问题似乎已经在Spring3.0中提出了。5不从属性计算@Value注释

Web应用根和servlet应用程序上下文之间的差异是Spring中最主要的混淆来源之一,请参阅Spring框架中应用程序ontext.xml和spring-servlet.xml之间的差异

@Valuejavadoc:

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

来自Spring文档:

BeanPost处理器接口的作用域为每个容器。这只有在使用容器层次结构时才相关。如果您在一个容器中定义BeanPost处理器,它将只在该容器中的bean上工作。在一个容器中定义的Bean不会被另一个容器中的BeanPost处理器进行后处理,即使两个容器都是同一层次结构的一部分。

 类似资料:
  • 问题内容: 我是Spring的新手,尝试使用带注释的控制器内部的注释注入带有值的字符串,并且将字符串的值作为字符串而不是属性文件中的值进行评估。 下面是我要插入的字符串“ message”的控制器。 我的应用程序上下文如下所示: 我的属性文件包含以下行: Spring必须在某个时候获取该值,因为每当我更改为不在属性文件之类的值时,都会出现异常。 问题答案: 似乎已经有人问过这个问题,Spring

  • 我曾在其他项目中工作过,我只是重新做同样的事情,但由于某些原因,它不起作用。Spring不是从属性文件读取,而是从字面上取值 AppConfig.java ApplicationContext.xml: AppConfig.Properties 想法?

  • 问题内容: 尝试在Spring 3.0.5.RELEASE中自动将属性连接到Bean ,我正在使用: config.properties: main-components.xml: MyClass: 结果,username被设置为字面值 ,因此表达式不会被解析。我对该类的其他自动关联依赖关系已设置,并且Spring不会引发任何异常。我也尝试添加,但没有帮助。 如果我将属性解析为单独的bean,然后

  • 我们一直在使用Spring@Value注释来注入属性值。我们有一个约定来命名属性名称,以匹配它们注入的java字段。这带来了不必要的工作,即每个ConfigBean的java字段都需要用@Value注释。 我正在寻找一种方法,用新的注释注释java类(比如说ConfigBean),让一些后处理器读取这些bean的属性名称,并自动注入属性值。 我正在寻找一些关于如何在没有@Value注释的情况下实现

  • 在以下Spring Boot应用程序中,@Value注释在WebSecurityConfig类中成功,但在FileSystemUplad类中没有。在FileSystemUplad类中,值(测试)使用与WebSecurityConfig使用的相同属性文件导致null。 应用.java WebSecurityConfig.java(其中@Value注入工作正常) FileSystemUpload.ja

  • 我有以下课程: 我从控制器调用方法test(): 然而,spring并没有注入构建。版本值,即使类具有组件注释。 我在控制器中使用相同的属性,它工作正常。 我做错了什么?