Spring学习笔记(七) --- 运行时值注入

本文是Spring学习笔记的第七部分,主要讨论Spring的运行时值注入,包括属性占位符和Spring表达式语言(SpEL)。通过属性占位符和SpEL,可以在运行时动态注入Bean的值,避免硬编码。文中详细介绍了如何使用Environment获取属性值,深入探讨了SpEL的用法,如引用Bean、属性、方法,以及各种运算符的使用。
摘要由CSDN通过智能技术生成

本系列博客为spring In Action 这本书的学习笔记

我们知道Spring的特性之一就是它的依赖注入机制. 那么当我们提到依赖注入最先想到的应该是Bean与Bean之间的依赖注入, 也就是我们前面大篇幅谈到的装配Bean, 但是依赖注入的另一个方面就是指将一个值注入到Bean的属性或者构造器参数中, 本篇博客就是来探讨一下关于值注入的一些问题.


一. 运行时值注入

在说明运行时值注入之前, 我们先来看一下在前面的博客里出现过的值注入的例子.

程序1: 在JavaConfig中的值注入的例子

@Bean
public CompactDisc jay(){
    return new Jay("魔杰座", "周杰伦");
}

程序2: 在XML中的值注入例子

<bean id="jay" class="AssemblingBean.SoundSystem_XML.Jay" >
    <constructor-arg index="0" value="魔杰座"/>
    <constructor-arg index="1" value="周杰伦"/>
</bean>

在前面的时候, 我们是这样使用值注入来组装这个jay Bean的, 可以看到, 无论是使用JavaConfig还是使用XML, 在实现值注入的时候都是将值硬编码在配置类中. 有的时候硬编码是可以的, 但是很多时候, 我们会希望能避免硬编码值, 而是让这些值在运行的时候再确定并且注入, 也就是运行时值注入.


为了实现运行时注入, Spring提供了两种方式:

  • 1. 属性占位符
  • 2. Spring表达式语言

属性占位符比较简单, 但是Spring表达式语言功能更为强大, 下面来详细看一下它们的用法.

1. 使用属性占位符注入外部的值

在Spring中, 处理外部值的最简单方式就是声明属性源并通过Spring的Environment来检索属性.
下面的例子就展现了一个基本的Spring配置类, 它使用外部的属性来装配jay Bean.

程序3: 使用PropertySource注解和Environment

@Configuration
@PropertySource("classpath:/AdvancedAssembly/RunTimeInjection/app.properties") //声明属性源
public class ExpressiveConfig {
   
    @Autowired
    Environment environment;

    @Bean
    public CompactDisc jay(){
        return new Jay(
                environment.getProperty("jay.title"),
                environment.getProperty("jay.artist")
        ); //检索属性值
    }
}

程序4: app.properties

jay.title = "魔杰座"
jay.artist = "周杰伦"

在这个例子中, @PropertySource引用了类路径中一个名为app.properties的属性文件, 这个属性文件会加载到Spring的Environment中, 可以从Environment中检索属性. 同时, 在jay()这个方法中会创建一个新的Jay, 它的构造器参数时从属性文件中获取的, 而这是通过调用getProperty()实现的.

为什么从Environment中就能拿到属性文件里面的属性值呢? 这就要看一下Environment中都有什么了.

(1) 深入学习Spring的Environment

1. 获取属性的值: getProperty()

在Environment中关于getProperty()方法有四个重载的形式, 如下:


                
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值