怎样自定义starter模块和使用

一、 自定义Starter模块

  • 在实际开发中,经常会定义一些公共组件,提供给各个项目团队使用。而在SpringBoot的项目中,一般会将这些公共组件封装为SpringBoot的starter(起步依赖)。

1.1实例–阿里云OSS的配置

  • 前言:我们在使用阿里云上传的时候需要开发一系列的东西(引入依赖,开发工具类Utils等),现在自定义AliyunOSS Starter 就可以简化开发。

1.1.1 需求

  • 需求:自定义aliyun-oss-spring-boot-starter,完成阿里云OSS操作工具类AliyunOsSUtils的自动配置。
  • 目标:引入起步依赖引入之后,要想使用阿里云OSS,注入AliyunosSUtils直接使用即可。

1.1.2 步骤

    1. 创建aliyun-oss-spring-boot-starter模块
    1. 创建aliyun-oss-spring-boot-autoconfigure模块,在starter中引入该模块
    1. aliyun-oss-spring-boot-autoconfigure模块中的定义自动配置功能,并定义自动配置文件META-INF/spring/xxxx.imports

1.1.3 具体实现

  1. 创建两个模块,并填写基本信息:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

生成的模块中除了pom.xmlaliyun-oss-spring-boot-starter.iml文件和文件夹,其余都是无用处的,可删除,使之简洁。

  • 同理,创建名为aliyun-oss-spring-boot-autoconfigure的模块,保留src文件夹和pom.xmlaliyun-oss-spring-boot-starter.iml文件,其余删除。
  1. 在starter的pom.xml文件中引入configure的依赖。
  2. 定义自动配置功能
  • 在configure模块的pom.xml文件中引入aliyun OSS的依赖
  • 将需要的utils文件放到com.aliyun.oss目录下(会用到Springboot的启动依赖等,自行配置)
  • 阿里云 OSS 工具类源码1:AliOSSProperties
package com.aliyun.oss;

import org.springframework.boot.context.properties.ConfigurationProperties;


@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;
    }
}
  • 阿里云 OSS 工具类源码2:AliOSSUtils
package com.aliyun.oss;

import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;

/**
 * 阿里云 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的路径返回
    }

}
  • 自动配置类:
package com.aliyun.oss;

import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

//自动配置类
@Configuration
@EnableConfigurationProperties(AliOSSProperties.class)  //将AliOSSProperties类导入进来,相当于一个bean对象了
public class AliOSSConfiguration {

    @Bean  //声明为IOC中的bean,使用时,直接注入此对象来使用
    public AliOSSUtils aliOSSUtils(AliOSSProperties aliOSSProperties) {  //指定此类型的额参数,会自动根据类型来装配
        AliOSSUtils aliOSSUtils = new AliOSSUtils();
        aliOSSUtils.setAliOSSProperties(aliOSSProperties);
        return aliOSSUtils;
    }
}
  • 最后在下图的文件中,配置AliOSSConfiguration的全类名,将来Springboot在启动此文件的时候就会自动加载,将上述的自动配置类AliOSSConfiguration导入到Springboot 的IOC容器管理中,在项目中使用就可以直接注入AliOSSUtils这个bean对象来使用。
    在这里插入图片描述

最后一点:使用时还需要将aliyun的配置信息写在yml文件下:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曼诺尔雷迪亚兹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值