SpringBoot的自动配置就是当Spring容器启动后,一些配置类、bean对象就自动存入到了IOC容器中,不需要我们手动去声明,从而简化了开发,省去了繁琐的配置操作。

使用场景:我们为什么还需要自定义 starter 起步依赖?这是因为在实际的项目开发当中,我们可能会用到很多第三方的技术,并不是所有的第三方的技术官方都给我们提供了与SpringBoot整合的starter起步依赖,但是这些技术又非常的通用,在很多项目组当中都在使用。 将来在项目当中进行相关功能开发时,只需要引入一个起步依赖就可以了

将来在项目当中,我要想使用这个技术,我直接将组件对应的坐标直接引入进来,就已经自动配置好了,就可以直接使用了。我们也可以把公共组件提供给别的项目组进行使用,这样就可以大大的简化我们的开发


以阿里云图片上传为例

我们在项目当中要使用阿里云OSS,就可以注入AliOSSUtils工具类来进行文件上传。但这种方式其实是比较繁琐的。 我们可以制作一个公共组件(自定义starter)。starter定义好之后,将来要使用阿里云OSS进行文件上传,只需要将起步依赖引入进来之后,就可以直接注入AliOSSUtils使用了。

操作步骤:

  • 第1步:创建自定义starter模块(进行依赖管理)
  • 把阿里云OSS所有的依赖统一管理起来
  • 第2步:创建autoconfigure模块
  • 在starter中引入autoconfigure (我们使用时只需要引入starter起步依赖即可)
  • 第3步:在autoconfigure中完成自动配置
  • 定义一个自动配置类,在自动配置类中将所要配置的bean都提前配置好
  • 定义配置文件,把自动配置类的全类名定义在配置文件中

第1步:创建自定义starter模块(进行依赖管理)创建完starter模块后,删除多余的文件,最终保留内容如下:

springboot 项目下载maven依赖命令 springboot依赖包下载_自定义

 第2步:创建autoconfigure模块,在starter中引入autoconfigure (我们使用时只需要引入starter起步依赖即可

springboot 项目下载maven依赖命令 springboot依赖包下载_java_02

第三步,

  •         在starter的xml中引入

  

<!--引入autoconfigure模块-->
         <dependency>
             <groupId>com.aliyun.oss</groupId>
             <artifactId>aliyun-oss-spring-boot-autoconfigure</artifactId>
             <version>0.0.1-SNAPSHOT</version>
         </dependency>
  • 在autoconfigure的xml中引入阿里云官方依赖

第四步,在autoconfigure中定义以下类

springboot 项目下载maven依赖命令 springboot依赖包下载_spring_03


AliOSSUtils类


/**
 * 阿里云 OSS 工具类
 */
public class AliOSSUtils {

    private AliOSSProperties aliOSSProperties;

    public AliOSSProperties getAliOSSProperties() {
        return aliOSSProperties;
    }

    public void setAliOSSProperties(AliOSSProperties aliOSSProperties) {
        this.aliOSSProperties = aliOSSProperties;
    }

    /**
     * 实现上传图片到OSS
     */
    public String upload(MultipartFile file) throws IOException {
        //获取阿里云OSS参数
        String endpoint = aliOSSProperties.getEndpoint();
        String accessKeyId = aliOSSProperties.getAccessKeyId();
        String accessKeySecret = aliOSSProperties.getAccessKeySecret();
        String bucketName = aliOSSProperties.getBucketName();

        // 获取上传的文件的输入流
        InputStream inputStream = file.getInputStream();

        // 避免文件覆盖
        String originalFilename = file.getOriginalFilename();
        String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));

        //上传文件到 OSS
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        ossClient.putObject(bucketName, fileName, inputStream);

        //文件访问路径
        String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;
        // 关闭ossClient
        ossClient.shutdown();
        return url;// 把上传到oss的路径返回
    }

}

 


AliOSSProperties类


@ConfigurationProperties(prefix = "aliyun.oss")
public class AliOSSProperties {
    private String endpoint;
    private String accessKeyId;
    private String accessKeySecret;
    private String bucketName;

    public String getEndpoint() {
        return endpoint;
    }

    public void setEndpoint(String endpoint) {
        this.endpoint = endpoint;
    }

    public String getAccessKeyId() {
        return accessKeyId;
    }

    public void setAccessKeyId(String accessKeyId) {
        this.accessKeyId = accessKeyId;
    }

    public String getAccessKeySecret() {
        return accessKeySecret;
    }

    public void setAccessKeySecret(String accessKeySecret) {
        this.accessKeySecret = accessKeySecret;
    }

    public String getBucketName() {
        return bucketName;
    }

    public void setBucketName(String bucketName) {
        this.bucketName = bucketName;
    }
}

 


AliossAutoConfiguration自动配置类


/**
 * 自动配置类
 */
@Configuration
@EnableConfigurationProperties(AliOSSProperties.class)
public class AliossAutoConfiguration {
    @Bean
    public AliOSSUtils aliOSSUtils(AliOSSProperties aliOSSProperties){
        AliOSSUtils aliOSSUtils = new AliOSSUtils();
        aliOSSUtils.setAliOSSProperties(aliOSSProperties);
        return aliOSSUtils;
    }
}

第五步,META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

springboot 项目下载maven依赖命令 springboot依赖包下载_自定义_04

 在里面放入自动配置类的全名称

最后,以后需要用阿里云上传文件,只需要在新模块xml中引入


<dependency>
    <groupId>cim.aliyun.oss</groupId>
    <artifactId>aliyun-oss-spring-boot-starter</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>