3.2.4.2 自定义starter实现

自定义starter的步骤我们刚才已经分析了,接下来我们就按照分析的步骤来完成自定义starter的开发。

首先我们先来创建两个Maven模块:

1). aliyun-oss-spring-boot-starter模块

 

创建完starter模块后,删除多余的文件,最终保留内容如下:

删除pom.xml文件中多余的内容后:

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

org.springframework.boot

spring-boot-starter-parent

2.7.5

com.aliyun.oss

aliyun-oss-spring-boot-starter

0.0.1-SNAPSHOT

11

org.springframework.boot

spring-boot-starter

2). aliyun-oss-spring-boot-autoconfigure模块

 

创建完starter模块后,删除多余的文件,最终保留内容如下:

删除pom.xml文件中多余的内容后:

按照我们之前的分析,是需要在starter模块中来引入autoconfigure这个模块的。打开starter模块中的pom文件:

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

org.springframework.boot

spring-boot-starter-parent

2.7.5

com.aliyun.oss

aliyun-oss-spring-boot-starter

0.0.1-SNAPSHOT

11

com.aliyun.oss

aliyun-oss-spring-boot-autoconfigure

0.0.1-SNAPSHOT

org.springframework.boot

spring-boot-starter

前两步已经完成了,接下来是最关键的就是第三步:

在autoconfigure模块当中来完成自动配置操作。

我们将之前案例中所使用的阿里云OSS部分的代码直接拷贝到autoconfigure模块下,然后进行改造就行了。

 

拷贝过来后,还缺失一些相关的依赖,需要把相关依赖也拷贝过来:

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

org.springframework.boot

spring-boot-starter-parent

2.7.5

com.aliyun.oss

aliyun-oss-spring-boot-autoconfigure

0.0.1-SNAPSHOT

11

       

           org.springframework.boot

           spring-boot-starter

       

org.springframework.boot

spring-boot-starter-web

org.projectlombok

lombok

com.aliyun.oss

aliyun-sdk-oss

3.15.1

javax.xml.bind

jaxb-api

2.3.1

javax.activation

activation

1.1.1

org.glassfish.jaxb

jaxb-runtime

2.3.3

现在大家思考下,在类上添加的@Component注解还有用吗?

 

答案:没用了。 在SpringBoot项目中,并不会去扫描com.aliyun.oss这个包,不扫描这个包那类上的注解也就失去了作用。

@Component注解不需要使用了,可以从类上删除了。

删除后报红色错误,暂时不理会,后面再来处理。

删除AliOSSUtils类中的@Component注解、@Autowired注解

下面我们就要定义一个自动配置类了,在自动配置类当中来声明AliOSSUtils的bean对象。

AliOSSAutoConfiguration类:

@Configuration//当前类为Spring配置类

@EnableConfigurationProperties(AliOSSProperties.class)//导入AliOSSProperties类,并交给SpringIOC管理

public class AliOSSAutoConfiguration {

   //创建AliOSSUtils对象,并交给SpringIOC容器

   @Bean

   public AliOSSUtils aliOSSUtils(AliOSSProperties aliOSSProperties){

       AliOSSUtils aliOSSUtils = new AliOSSUtils();

       aliOSSUtils.setAliOSSProperties(aliOSSProperties);

       return aliOSSUtils;

  }

}

AliOSSProperties类:

/*阿里云OSS相关配置*/

@Data

@ConfigurationProperties(prefix = "aliyun.oss")

public class AliOSSProperties {

   //区域

   private String endpoint;

   //身份ID

   private String accessKeyId ;

   //身份密钥

   private String accessKeySecret ;

   //存储空间

   private String bucketName;

}

AliOSSUtils类:

@Data

public class AliOSSUtils {

   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的路径返回

  }

}

在aliyun-oss-spring-boot-autoconfigure模块中的resources下,新建自动配置文件:

META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports com.aliyun.oss.AliOSSAutoConfiguration

好文阅读

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。