一,为什么要定义Start
向阿里云OSS如果我们要引入的话很麻烦,所以我们可以自定义一些组件,
然后我们只需要在pom文件中引入对应的坐标就可以
二,怎么定义(以阿里云OSS为例)
1, 定义两个组件模块
- org.mybatisspring.boot:mybatis-spring-boot-starter
- 这个模块中什么代码都不需要有------只需要在pom文件中定义
- 自定义aliyun-oos-spring-boot-starter
- 其他的都删除只保留
- 精简pom文件
- org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure
- 在这个包中进行自动配置功能
- 自定义aliyun.oss-spring-boot-autoconfigure
- 其他的都删除----
- -启动类和application配置文件也删除---测试类也删除
- 然后再starter中的配置文件中引入autoconfigure依赖----非常重要
- 在autoconfigure的pom文件中引入aliyunoss的依赖
- 将工具类放到com.aliyun.oss包下面
- 定义一个自动配置类AliOSSConfiguration
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) //将当前类导入IOC容器当中 只能加在配置类或者声明Bean的方法上----括号类是将那个类导入 public class AliOSSAutoConfiguration {@Beanpublic AliOSSUtils aliOSSUtils(AliOSSProperties aliOSSProperties){ //我们需要注入某一个对象只需要 在方法形参中引用,他就自动注入AliOSSUtils aliOSSUtils = new AliOSSUtils();aliOSSUtils.setAliOSSProperties(aliOSSProperties);return aliOSSUtils;} }
- 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;}
自定义自动配置文件(要想Spring启动时自动加载该文件必须配置)--两级目录下创建一个文件文件名为
org.springframework.boot.autoconfigure.AutoConfiguration.imports
然后将自动配置文件的全类名复制进去