怎样自定义starter模块和使用

有时候,不是因为你没有能力,也不是因为你缺少勇气,只是因为你付出的努力还太少,所以,成功便不会走向你。而你所需要做的,就是坚定你的梦想,你的目标,你的未来,然后以不达目的誓不罢休的那股劲,去付出你的努力,成功就会慢慢向你靠近。

导读:本篇文章讲解 怎样自定义starter模块和使用,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

一、 自定义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文件,其余删除。
    怎样自定义starter模块和使用
  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文件下:
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/150359.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!