我需要知道以下两种加载属性文件的方式之间的区别。

方法1

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

方法2

<context:component-scan base-package="com.snippets.enterprise"/>

package com.snippets.enterprise;

@Configuration
@PropertySource("classpath:/constants.properties")
public class SpringConfig  {}

我在方法中看到在加载应用程序上下文时有两个键和值可用。 但在

当应用程序上下文正在加载时, 方法的属性的关键之一不可用,它说

找不到密钥。 请让我知道这两种方法的区别。

  1. 使用应用程序上下文加载属性文件时。

  2. 键入key时,属性文件的值将在容器中初始化。

===============>>#1 票数:5

两者实际上都是非常独立的。 让我尝试根据我的理解进行澄清:

使用context:property-placeholder方法1注册了一个组件,该组件可以在bean定义中解析${propertyname}形式的占位符。

@PropertySource批注为活动的Spring环境提供属性。

现在,回到方法1, context:property-placeholder实际上足够聪明,知道它不仅需要查看通过其location属性注册的属性,还需要查看当前活动环境中可用的属性(属性已通过@PropertySource注释(如您的方法2)添加到其中。

因此,如果您希望继续解决占位符,则需要将方法1与方法2结合使用。

另一方面,如果您想专门使用方法2,那么最好的方法是在需要该属性并明确查找该属性的环境中进行注入,方法是:

@Component
public class MyBean {
    @Autowired 
    private Environment environment;

    public void mymethod() {
        ..
        environment.getProperty("mykey");
    }
}

  ask by Kasun translate from so

未解决问题?本站智能推荐: