【问题标题】:How to use one property into another property in Java with Spring?java - 如何使用Spring将一个属性用于Java中的另一个属性?
【发布时间】:2014-06-07 17:12:41
【问题描述】:

我正在使用 Spring MVC 4.0.2 进行 Web 开发。我正在尝试如下声明我的属性 (app.properties) 文件。

login.view=login
login.url=/${login.view}

现在,如果我尝试像这样访问 login.url,

@RequestMapping(value = "${login.url}", method = RequestMethod.GET)
public String login(ModelMap model)
{ 
      return "login";
}

一切正常。

但是当我尝试像这样访问相同的属性时,

String s = (String)PropertiesLoaderUtils.loadProperties(new ClassPathResource("app.properties")).getProperty("login.url");

我得到输出:${login.url},应该是/login。我不明白为什么会这样。有什么想法吗?

【问题讨论】:

    标签: java spring spring-mvc properties


    【解决方案1】:

    Sotirios 关于为什么会发生的答案是正确的。您可以使用 @Value 注入而不是通过 PropertiesLoaderUtils 加载...

    进入构造函数:

    public MyClass(@Value("${login.url}") String loginUrl) {...}
    

    或一个字段:

    @Value("${login.url}")
    private String loginUrl;
    

    或二传手:

    @Value("${login.url}")
    public void setLoginUrl(String loginUrl) {
      this.loginUrl = loginUrl;
    }
    

    【讨论】:

    • 感谢您的回复@Chris H。我需要在 Java 代码中获取它。
    • 是的,通过将其注入构造函数、字段或设置器中,您可以在 Java 代码中访问它。
    • 但我不想声明一个归档或设置方法。根据我的回答,我也可以在没有它的情况下访问属性。
    【解决方案2】:

    这个

    String s = (String)PropertiesLoaderUtils.loadProperties(new ClassPathResource("app.properties")).getProperty("login.url");
    

    不应用任何属性解析,而处理 @RequestMapping 注释的 RequestMappingHandlerMapping 应用。

    【讨论】:

      【解决方案3】:

      终于有答案了,

      public class PropertiesUtil extends PropertyPlaceholderConfigurer
      {
          private static Map<String, Object>  propertiesMap;
      
          @SuppressWarnings({ "deprecation", "rawtypes" })
          @Override
          protected void processProperties(ConfigurableListableBeanFactory beanFactory, Properties props) throws BeansException
          {
              super.processProperties(beanFactory, props);
              propertiesMap = new HashMap<String, Object>();
              for (Object key : props.keySet())
              {
                  String keyStr = key.toString();
                  propertiesMap.put(keyStr, parseStringValue(props.getProperty(keyStr), props, new HashSet()));
              }
          }
      
          public static String getProperty(String name)
          {
              return (String) propertiesMap.get(name);
          }
      }
      

      然后

      String s = PropertyUtil.getProperty("login.url");
      

      【讨论】:

      • 从技术上讲,您没有回答您提出的问题。 :)
      猜你喜欢
      • 1970-01-01
      • 2012-11-13
      • 2018-02-20
      • 2021-01-16
      • 2020-10-19
      • 1970-01-01
      • 1970-01-01
      • 2012-03-05
      • 2017-08-28
      相关资源
      最近更新 更多