文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

SpringBoot属性注入的方式有哪些

2023-06-25 11:36

关注

这篇文章给大家分享的是有关SpringBoot属性注入的方式有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

一、@Value注解注入属性

SpringBoot默认可以将application.properties文件或application.yml文件中定义的属性值注入到java类中,这种注入实际上是通过java类属性的setter方法进行的。

例:将application.yml中的以下属性注入到类中:

## 自定义属性
petshop:
  name: 睿芽宠物
  introduce: 种类齐全,安全可靠
  licences: 1、上市许可证,2、疫苗许可证
  infos: "{'phone':'36xx102','address':'xx省xx市'}"

使用@Value注解可以将application.yml中的属性注入,@Value注解使用${属性名}的方式来声明要注入的属性,如果要注入的属性为Map集合,则需要结合Spel表达式进行处理。

package com.it.action;import org.springframework.beans.factory.annotation.Value;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import java.util.LinkedHashMap;import java.util.List;import java.util.Map;@RestController@RequestMapping("/source")public class SourceAction {    @Value("${petshop.name}")    private String name;    @Value("${petshop.introduce}")    private String introduce;    @Value("${petshop.licences}")    private List<String> licences;    @Value("#{${petshop.infos}}")    private Map<String, String> infos;    @RequestMapping("/show")    public Object show() {        Map<String, Object> map = new LinkedHashMap();        map.put("name", name);        map.put("introduce", introduce);        map.put("licences", licences);        map.put("infos", infos);        return map;    }}

访问http://localhost:8080/source/show观察被注入的属性:

SpringBoot属性注入的方式有哪些

二、@ConfigurationProperties注解批量注入属性

@ConfigurationProperties注解用于注入有着相同前缀的属性,注入的方式也是通过java类的setter方法来完成,但是这种方式缺少了@Value注解的灵活性,也无法结合spel语言进行处理。

例:将application.yml中的以下属性注入到类中:

## 自定义属性
petshop:
  name: 睿芽宠物
  introduce: 种类齐全,安全可靠
  licences: 上市许可证,疫苗许可证
  infos:
    - phone: 36xx102
    - address: xx省xx市

新建PetShop类并注入属性:

package com.it.vo;import lombok.Data;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.stereotype.Component;import java.util.List;import java.util.Map;@Data@Component@ConfigurationProperties(prefix = "petshop")public class PetShop {    private String name;    private String introduce;    private List<String> licences;    private Map<String, String> infos;}

测试注入的结果:

package com.it.action;import com.it.vo.PetShop;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/source")public class SourceAction {    @Autowired    private PetShop petShop;    @RequestMapping("/show")    public Object show() {        return petShop;    }}

SpringBoot属性注入的方式有哪些

三、注入实体对象

使用@ConfigurationProperties注解可以将关联的对象一同注入。

修改application.yml文件:

## 自定义属性
petshop:
  name: 睿芽宠物
  introduce: 种类齐全,安全可靠
  shopInfo:
    phone: 36xx102
    address: xx省xx市
    licences: 上市许可证,疫苗许可证
  pets:
    - pet:
      name: 金毛
      price: 3365.21
    - pet:
      name: 巴哥
      price: 2136.10

新建三个java类,并设置好引用关系:

@Datapublic class PetShopInfo {    private String phone;    private String address;    private List<String> licences;}
@Datapublic class Pet {    private String name;    private double price;}
@Data@Component@ConfigurationProperties(prefix = "petshop")public class PetShop {    private String name;    private String introduce;    private PetShopInfo shopInfo;    private List<Pet> pets;}

测试注入结果:

@RestController@RequestMapping("/source")public class SourceAction {    @Autowired    private PetShop petShop;    @RequestMapping("/show")    public Object show() {        return petShop;    }}

SpringBoot属性注入的方式有哪些

四、自定义文件注入

在resource目录下新建petshop/petshop.properties文件,将application.yml中的属性转换为properties中的key-value格式:

## 自定义属性
petshop.name=睿芽宠物
petshop.introduce=种类齐全,安全可靠

petshop.shopInfo.phone=36xx102
petshop.shopInfo.address=xx省xx市
petshop.shopInfo.licences=上市许可证,疫苗许可证

petshop.pets[0].name=金毛
petshop.pets[0].price=3365.21

petshop.pets[1].name=巴哥
petshop.pets[1].price=2136.10

修改PetShop类,添加@PropertySource注解导入properties文件

@Data@Component@PropertySource(value = "classpath:petshop/petshop.properties", encoding = "UTF-8")@ConfigurationProperties(prefix = "petshop")public class PetShop {    private String name;    private String introduce;    private PetShopInfo shopInfo;    private List<Pet> pets;}

访问http://localhost:8080/source/show发现可以得到与上例相同的结果。

感谢各位的阅读!关于“SpringBoot属性注入的方式有哪些”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯