Spring学习之旅(三)之运行值时注入

依赖运行时注入值(非Bean),就是在运行的时候求值,可以避免在源码中进行硬编码:
运行时注入有三种方法:
第一种:注入外部的值
1.处理外部值的一个方法是先声明属性来源,然后通过Spring的Environment来检索属性。
使用@PropertySource注解来声明属性源。
例:假设类FirstClass的构造器要注入两个String参数。

@Configuation
@PropertySource("classpath:属性来源的路径")  //声明属性来源
public class MyConfig
{
    @Autowired
    Environment env;
    @Bean
    public FirstClass firstClass()
    {
        renturn new FirstClass(env.getProperty("属性名1"),env.getProperty("属性名2"));
    }
}

属性源的文件内容类似于:
属性名1=值
属性名2=值

Environment的getProperty()方法有四个重载版本:
1.String getProperty(String key) //根据key返回相应属性的值。返回的值是String。
2.String getProperty(String key,String defaultValue) //提供一个默认值,如果属性不存在,则使用这个默认值。返回的值是String。
3.T getProperty(String key,Class<T> type) //返回的值不一定是String,可以是其他的类型
4.T getProperty(String key,Class<T> Type,T defaultValue) //与上面一个版本一样,只是当属性未定义时使用默认值。

第二种方法:使用占位符
1.占位符的形式使用{…..}。
要使用占位符我们必须配置PropertyPlaceHolderConfigurer Bean 或者PropertySourcesPlaceHolderConfigurer。
Spring3.1之前必须使用PropertyPlaceHolderConfigurer
Spring3.1之后两种的可以使用,但推荐PropertySourcesPlaceHolderConfigurer,应为他能够基于Spring Environment 及其属性源来解析占位符。

<bean id="firstClass" class="com.FirstClass">
<construct-arg value={"属性名1"}/>     //通过Xml配置
<construct-arg value={"属性名2"}/>
</bean>

--------------------------------------------------------------------
@Configuation
public class MyConfig     //通过JavaConfig配置
{
    @Bean
    public FirstClass firstClass(@Value("{属性名1}") String a,@Value("{属性名2}") String b)
    {
        return new FristClass(a,b);
    }
}

第三种:使用Spring表达式语言(SpEL)来进行装配:
SpEL支持的特性包括:
1.能使用Bean的ID来引用Bean。
2.可以调用方法和访问对象的属性。
3.可以对值进行算数,关系,逻辑运算。
4.可以使用正则表达式。
5.可以对集合进行操作。

SpEL表达式要放在#{…}中。

public FirstClass firstClass(@Value("#{属性名1}") String a,@Value("#{属性名2}"} String b)
{
    return new FirstClass(a,b);
}

一:SpEL表示字面量:
#{3.1415}
#{'Hello Word'}
#{false}

二:引用Bean,属性,方法
#{Bean id}
#{Bean id.属性名}
#{Bean id.方法名(参数)}

三:使用类型
使用类型要用T
例:
T(java.lang.Math).PI
T(java0lang.Math).random()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值