Injecting external values
运行时动态注入值,有三种方式:
- Spring Environment
- property placeholders
- The Spring Expression Language(SPEL)
前提条件
- 配置PropertyPlaceholderConfigurer,作为入口
<bean id="propertyPlaceholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath*:*.properties</value>
</list>
</property>
<property name="fileEncoding" value="UTF-8"/>
</bean>
- 或者使用:
<util:properties />
docs
- 流程:http://blog.csdn.net/nicewuranran/article/details/52518420
- systemProperties vs systemEnvironment: https://springframework.guru/introduction-spring-expression-language-spel/
- http://www.concretepage.com/spring/example_utilproperties_spring
1. Spring Environment
package com.soundsystem;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
@Configuration
@PropertySource("classpath:/com/soundsystem/app.properties")
public class EnvironmentConfig {
@Autowired
Environment env;
@Bean
public BlankDisc blankDisc() {
return new BlankDisc(
env.getProperty("disc.title"),
env.getProperty("disc.artist"));
}
}
spring’s environment api
- String getProperty(String key): env.getProperty("disc.title")
- String getProperty(String key, String defaultValue): env.getProperty("disc.artist", "U2"));
- T getProperty(String key, Class<T> type): Class<CompactDisc> cdClass =
env.getProperty("disc.title", String.class); - T getProperty(String key, Class<T> type, T defaultValue): int connectionCount =
env.getProperty("db.connection.count", Integer.class, 30); - getRequiredProperty("disc.title"): 不存在抛 IllegalStateException
- env.containsProperty("disc.title");
- boolean titleExists = env.containsProperty("disc.title"): 判断是否存在
- Class<CompactDisc> cdClass =
env.getPropertyAsClass("disc.class", CompactDisc.class): 解析a property 到一个类里
spring environment for profile
- String[] getActiveProfiles(): Returns an array of active profile names
- String[] getDefaultProfiles()—Returns an array of default profile names
- boolean acceptsProfiles(String... profiles)—Returns true if the envi-
ronment supports the given profile(s)
2. property placeholders
component-scann 配置方式
public BlankDisc(
@Value("${disc.title}") String title,
@Value("${disc.artist}") String artist) {
this.title = title;
this.artist = artist;
}
xml 配置
<bean id="sgtPeppers"
class="soundsystem.BlankDisc"
c:_title="${disc.title}"
c:_artist="${disc.artist}" />
3.SpEL
JavaConfig
public BlankDisc(
@Value("#{systemProperties['disc.title']}") String title,
@Value("#{systemProperties['disc.artist']}") String artist) {
this.title = title;
this.artist = artist;
}
xml
<bean id="sgtPeppers"
class="soundsystem.BlankDisc"
c:_title="#{systemProperties['disc.title']}"
c:_artist="#{systemProperties['disc.artist']}" />
网友评论