SpringInAction学习笔记:运行时值注入

运行时注入

避免在配置bean时的硬编码

@Bean
public CompactDisc sgtPeppers(){

    return new BlankDisc("Sgt...","The Beatles");
}

<bean id="sgtPeppers" class="..."
    c:_title="Sgt..."
    c:_artist="The Beatles" />

上面两种直接传递实际的值可理解为硬编码

避免硬编码 Spring提供了两种运行时求值的方式
- 属性占位符
- Spring表达式语言(SpEL)

注入外部的值

spring中处理外部值最简单的方式就是生命属性源并通过Spring的Environment来检索属性

@Configuration
@PropertySource("classpath:/com/soundsystem/app.properties")//声明属性源
public class ExpressiveConfig{

    @Autowired
    Environment env;

    @Bean
    public BlankDisc disc(){
        return new BlankDisc(env.getProperty("disc.title","disc.artist"));
    }
}

Environment提供的属性相关方法

getProperty() 方法有四种重载的变种形式
- String getProperty(String key)
- String getProperty(String key,String default)
- T getProperty(String key,Class type)
- T getProperty(String key,Class type,T default)

其他属性相关方法

getRequiredProperty(“”) 要获取的属性必须要定义否则跑出IllegalStateException
containsProperty(“”) 某个属性是否存在

Environment检查profile的方法

String[] getActiveProfiles() 返回激活profile名称的数组
String[] getDefaultProfiles() 返回默认profile名称数组
boolean acceptProfiles(String …profiles) 如果Environment支持给定的profile的话就返回true

——————-\


解析属性占位符

Spring一直支持将属性定义到外部属性文件中,并通过占位符值将其插入到bean中,占位符的形式为使用“${…}”包装的属性名称

public BlankDisc(@Value("${disc.title}" ) String title,@Value("${disc.artist}") String artist){
    this.title = title;
    this.artist = artist;
}


<bean id="" class=""
    c:_title="${disc.title}"
    c:_artist="${disc.artist}" />


为了使用占位符,必须要配置一个PropertyPlaceholderCOnfigurer bean 或者 PropertySourcesPlaceholderConfigurer bean
从spring3.1 开始推荐使用后者 因为它能基于spring Environment及其属性源解析占位符

@Bean
public static PropertySourcesPlaceholderConfigurer  placeholderConfigurer(){
    return new PropertySourcesPlaceholderConfigurer();
}


或在xml配置中

<beans ....>
    <context:property-placeholder />
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值