context:propertyPlaceholder

Activates replacement of ${...} placeholders by registering a PropertySourcesPlaceholderConfigurer within the application context. Properties will be resolved against the specified properties file or Properties object -- so called "local properties", if any, and against the Spring Environment's current set of PropertySources. Note that as of Spring 3.1 the system-properties-mode attribute has been removed in favor of the more flexible PropertySources mechanism. However, Spring 3.1-based applications may continue to use the 3.0 (and older) versions of the spring-context schema in order to preserve system-properties-mode behavior. In this case, the traditional PropertyPlaceholderConfigurer component will be registered instead of the new PropertySourcesPlaceholderConfigurer. See ConfigurableEnvironment javadoc for more information on using.

https://docs.spring.io/spring/docs/4.3.11.RELEASE/spring-framework-reference/htmlsingle/#xsd-config-body-schemas-context-pphc

方式一:

<context:property-placeholder location="classpath:foo.properties"/>
@Component
public class FooProperties {
    
    public static String fooName;
    
    @Autowired
    public void setFooName( @Value("${foo.name}") String fooName) {
        FooProperties.fooName = fooName;
    }
    
}

方式二:

    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <value>classpath:foo.properties</value>
        </property>
    </bean>
@Component
public class FooProperties {
    
    public static String fooName;
    
    @Autowired
    public void setFooName( @Value("${foo.name}") String fooName) {
        FooProperties.fooName = fooName;
    }
    
}

方式三:

    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="properties">
            <value>
                foo.name=aaa
                foo.age=12
            </value>
        </property>
    </bean>
@Component
public class FooProperties {
    
    public static String fooName;
    
    @Autowired
    public void setFooName( @Value("${foo.name}") String fooName) {
        FooProperties.fooName = fooName;
    }
    
}

方式四:

        new PropertyPlaceholderConfigurer() {

            @Override
            protected void processProperties(ConfigurableListableBeanFactory beanFactoryToProcess, Properties props)
                    throws BeansException {
                // TODO Auto-generated method stub
                super.processProperties(beanFactoryToProcess, props);
            }
        }

重写默认placeholder 配置器

注: @Value 通过实例方法给静态变量注入值的时候需要配合 @Autowired 使用

         @Value 可以直接为实例变量注入值 ${...} or "#{...['XXX']}

         @Value("${...}")    与   @Value("#{...['XXX']} 各有优势,需视情况使用 

原文地址:https://www.cnblogs.com/zno2/p/4691904.html