当前位置:首页 » 《关于电脑》 » 正文

Javaweb之SpringBootWeb案例之 @ConfigurationProperties的详细解析

14 人参与  2024年05月08日 11:03  分类 : 《关于电脑》  评论

点击全文阅读


4.3 @ConfigurationProperties

讲解完了yml配置文件之后,最后再来介绍一个注解@ConfigurationProperties。在介绍注解之前,我们先来看一个场景,分析下代码当中可能存在的问题:

我们在application.properties或者application.yml中配置了阿里云OSS的四项参数之后,如果java程序中需要这四项参数数据,我们直接通过@Value注解来进行注入。这种方式本身没有什么问题问题,但是如果说需要注入的属性较多(例:需要20多个参数数据),我们写起来就会比较繁琐。

那么有没有一种方式可以简化这些配置参数的注入呢?答案是肯定有,在Spring中给我们提供了一种简化方式,可以直接将配置文件中配置项的值自动的注入到对象的属性中。

Spring提供的简化方式套路:

需要创建一个实现类,且实体类中的属性名和配置文件当中key的名字必须要一致

比如:配置文件当中叫endpoints,实体类当中的属性也得叫endpoints,另外实体类当中的属性还需要提供 getter / setter方法

需要将实体类交给Spring的IOC容器管理,成为IOC容器当中的bean对象

在实体类上添加@ConfigurationProperties注解,并通过perfect属性来指定配置参数项的前缀

实体类:AliOSSProperties

import lombok.Data;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.stereotype.Component;​/*阿里云OSS相关配置*/@Data@Component@ConfigurationProperties(prefix = "aliyun.oss")public class AliOSSProperties {    //区域    private String endpoint;    //身份ID    private String accessKeyId ;    //身份密钥    private String accessKeySecret ;    //存储空间    private String bucketName;}

AliOSSUtils工具类:

import com.aliyun.oss.OSS;import com.aliyun.oss.OSSClientBuilder;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;import org.springframework.web.multipart.MultipartFile;import java.io.IOException;import java.io.InputStream;import java.util.UUID;​@Component //当前类对象由Spring创建和管理public class AliOSSUtils {​    //注入配置参数实体类对象    @Autowired    private AliOSSProperties aliOSSProperties;           /**     * 实现上传图片到OSS     */    public String upload(MultipartFile multipartFile) throws IOException {        // 获取上传的文件的输入流        InputStream inputStream = multipartFile.getInputStream();​        // 避免文件覆盖        String originalFilename = multipartFile.getOriginalFilename();        String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));​        //上传文件到 OSS        OSS ossClient = new OSSClientBuilder().build(aliOSSProperties.getEndpoint(),                aliOSSProperties.getAccessKeyId(), aliOSSProperties.getAccessKeySecret());        ossClient.putObject(aliOSSProperties.getBucketName(), fileName, inputStream);​        //文件访问路径        String url =aliOSSProperties.getEndpoint().split("//")[0] + "//" + aliOSSProperties.getBucketName() + "." + aliOSSProperties.getEndpoint().split("//")[1] + "/" + fileName;​        // 关闭ossClient        ossClient.shutdown();        return url;// 把上传到oss的路径返回    }}​

在我们添加上注解后,会发现idea窗口上面出现一个红色警告:

这个警告提示是告知我们还需要引入一个依赖:

<dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-configuration-processor</artifactId></dependency>

当我们在pom.xml文件当中配置了这项依赖之后,我们重新启动服务,大家就会看到在properties或者是yml配置文件当中,就会提示阿里云 OSS 相关的配置项。所以这项依赖它的作用就是会自动的识别被@Configuration Properties注解标识的bean对象。

刚才的红色警告,已经变成了一个灰色的提示,提示我们需要重新运行springboot服务

@ConfigurationProperties注解我们已经介绍完了,接下来我们就来区分一下@ConfigurationProperties注解以及我们前面所介绍的另外一个@Value注解:

相同点:都是用来注入外部配置的属性的。

不同点:

@Value注解只能一个一个的进行外部属性的注入。

@ConfigurationProperties可以批量的将外部的属性配置注入到bean对象的属性中。

如果要注入的属性非常的多,并且还想做到复用,就可以定义这么一个bean对象。通过 configuration properties 批量的将外部的属性配置直接注入到 bin 对象的属性当中。在其他的类当中,我要想获取到注入进来的属性,我直接注入 bin 对象,然后调用 get 方法,就可以获取到对应的属性值了


点击全文阅读


本文链接:http://zhangshiyu.com/post/105025.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1