(Spring Boot教程四 )使用注解@Value、@PropertySource、@ImportResource、@bean进行配置,以及配置文件加载顺序

本文详细介绍了Spring Boot中配置的多种方式,包括@Value注解的使用,如注入各种类型的数据,与@ConfigurationProperties的区别,以及@PropertySource、@ImportResource和@Bean的原理与实践。通过实例展示了如何进行配置文件加载、bean注入和管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一篇教程我们使用了application.properties和application.yml进行项目的配置,这篇博客将告诉你更多Spring Boot项目配置的方式

目录

0.项目结构及代码

1.使用@Value进行配置

1.1 简介

1.2 可注入类型

1.2.1 注入类型和注入方法

1.2.2 字面量:包括布尔、数值型、字符串等。

1.2.3 数组(List)

1.2.4  键值对(Map)

1.2.5  其他bean属性

1.2.6  URL资源

1.2.7  文件资源

1.2.8  系统属性

二、@Value和@ConfigurationProperties比较

2.1 作用范围

2.2 获取值的方式

2.3 使用场景

三、@PropertySource、@ImportResource、@bean

2.1 @PropertySource

2.1.1 源码及参数解释

2.1.2 项目实践

2.2 @ImportResource

2.2.1 源码及参数解释

2.2.2 项目实践

2.3 @Bean

2.2.1 源码及参数解释

2.2.2 项目实践


0.项目结构及代码

配置文件application.yml的内容如下:

student:
  name: zg
  is-female: false
  birth: 2019/04/12
  teachers: [zhang,wang]
  grade: {English: 87, Math: 100}
  pets:
    spices: Dog
    age: 1

Student.java代码如下,内容仅含成员变量,请自动生成toString()方法、get()方法和set()方法。

@Component
@ConfigurationProperties(prefix="student")
public class Student {
    private String name;
    private Boolean isFemale;

    @Value("2014/3/12")
    private Date birth;

    private List<Object> teachers;
    private Map<String, Object> grade;

    private Pet pets;
}

Pet.java代码如下,内容仅含成员变量,请自动生成toString()方法、get()方法和set()方法。

public class Pet {
    private String spices;
    private Integer age;
}

主配置类Application.java是自动生成的代码如下:

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

测试类ApplicationTests.java代码如下.

@RunWith(SpringRunner.class)
@SpringBootTest
public class ApplicationTests {
    @Autowired
    Student student;

    @Test
    public void contextLoads() {
        System.out.println(student);
    }

}

1.使用@Value进行配置

1.1 简介

1、@Value用于将外部的值动态地注入Bean中,相当于使用.xml中的如下的代码。通常用于对某个值进行单个的注入,毕竟如果对整个Bean内的值进行注入我们有更好用的@ConfigurtionProperties可以使用。

<bean class="类名">
    <property name="需要注入值的变量名" value="注入的值"></properties>
</bean>

2、我们可以点进去看一下@Value的源码,如下,我们发现它其中只包括一个String类型的变量,也就是说我们@Value注解后面只能接一个String类型的变量,无论什么内容都必须包括在双引号之下。

@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Value {
    String value();
}

1.2 可注入类型

1.2.1 注入类型和注入方法

1、一共有7种可注入类型。字面量、数组(List)、键值对(Map)、其他bean属性、URL资源、文件资源、系统属性。可通过字符串或SpEL(Spring表达式语言,如计算表达式),也可以与配置文件一起配合使用。

(1)字符串:@Value("字符串内容")。适用于一般的自变量、数组、文件资源和URL资源,Spring Boot会根据配置的变量类型对字符串内容进行转换。

(2)SpEL:@Value("#{SpEL内容}")。通常SpEL内的字符串使用单引号''括起来。适用于需要计算的自变量、特殊数组、键值对、其他bean属性等。

(3)如果需要引入配置文件:${配置文件中的变量:默认值}.可以与字符串和SpEL进行组合,可设置默认值。如:

    @Value("${web.blog:false}")
    private Boolean blog;

   在blog变量做值的注入,从配置文件中找是否有web.blog变量,如果没有,为其赋默认值false。

2、 接下来我将给出一些实例,方便进行理解。

   首先我们构建一个新的bean,内容如下,请自动生成toString()方法、get()方法和set()方法。注意Resource的库文件的选择,有很多Resource,选择springframework的那个。

import org.springframework.core.io.Resource;
import java.util.Date;
import java.util.List;
import java.util.Map;

@Component
public class Website {
    //点击次数
    private Integer clickNum;
    //网站名称
    private String webName;
    //是不是博客
    private Boolean blog;
    //构建时间
    private Date buildDate;
    //构建的人
    private String buildPerson;
    //关键字
    private List<String> key;
    //其他属性
    private Map<String,String> otherProperties;
    //网址
    private Resource address;
    //介绍
    private Resource intro;
}

    然后我们修改一下ApplicationTests的内容,方便输出结果进行查看,执行的时候右键->Run就可以了。

public class ApplicationTests {
    @Autowired
    Website web;

    @Test
    public void contextLoads() {
        System.out.println(web);
    }

}

1.2.2 字面量:包括布尔、数值型、字符串等。

1、比较简单的使用@Value("字符串")即可。

    @Value("true")
    private Boolean blog;

2、可以通过SpEL注入,我们这里以整型的变量clickNum为例。代码和二者执行后的结果如下。

    @Value("#{12*15}")
    private Integer clickNum;

3、 可以通过@Value结合配置文件进行注入。配置文件可以使用".properties"和".yml",配置文件内容和注入方式如下所示。这里展示了使用配置文件的方式,所以之后如果非必要,我就不再展示这一部分的配置,并非无法使用。

#如果使用.properties文件配置
date=2011/6/11
#如果使用.yml进行配置
date: 2011/6/11
    @Value("${date}")
    private Date buildDate;

  

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值