自定义starter
名称前缀定义规范
SpringBoot-boot -starter\autoconfigure 官方提供 Spring在前
Mybatis-Spring -starter\autoconfigure 我们创建(第三方提供) 工具类名在前
如名称所述starter都分为两部分
starter 起步依赖 依赖管理功能 将当前功能相关的模块都依赖传递
autoconfigure 自动配置 自动配置功能 多人同用 简化固定统一的前置操作) 将这些公共组件封装一起
在引入自定义starter时
我们引入starter部分即可 它会通过maven依赖传递引入autoconfigure部分
实战需求 :完成阿里云OSS文件上传工具类自动配置
第一步 创建第一部分 Springboot项目 aliyun-oss-spring-boot-starter 无需添加其他起步依赖

仅需保留pom文件 其他删除
如果创建时SpringBoot起步依赖版本不一致可以在创建完成后的pom文件修改

pom文件中的其他部分可以删除
创建完第二部分后就可在该第一个项目的pom文件中写入
<!--在依赖管理中引入我们刚刚建立的aliyun-oss-spring-boot-autoconfigure模块--> <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-oss-spring-boot-autoconfigure</artifactId> </dependency>
第二步 创建第二部分 Springboot项目 aliyun-oss-spring-boot-autoconfigure
保留src 用于写自动配置文件 、保留pom文件 (pom内容也可仅保留上面图片部分)
src下test resource下的properties com.aliyun.oss下的启动类 均使用不到 可删除
写入:
在该项目的pom文件 引入阿里云服务的相关依赖
建立同名包 即com.aliyun.oss 在其下迁移我们的上传文件工具类

修改:
由于这个项目没有了启动类 没有引入lombok注解
Properties中 (这个文件初步了封装pom中引入的阿里云依赖中的属性 通过@ConfigurationProperties(prefix = "aliyun.oss")引入pom文件中前缀为aliyun.oss的依赖 并 使用其成员变量初步引入封装)
@Component我们删除他 没有启动类 作为第三方工具类 不会被扫描到
@Data我们替换为Alt+insert 生成getset方法
Operator中 (这个文件是文件上操作工具类)
@Component我们删除他 同上
@Autowired我们替换为构造方法注入Properties
新建:
由跟踪@SpringBootApplication源码 得其内部封装@EnableAutoConfiguration启发
我们声明一个自动配置类AliyunOSSAutoConfiguration 后缀同上-AutoConfiguration
进一步的封装Properties中 达到自动装配 Properties中初步封装的属性
@EnableConfigurationProperties(AliyunOSSProperties.class)//其内部封装了@Import注解
@Configuration//声明配置类 内部封装Component
public class AliyunOSSAutoConfiguration {
@Bean//声明下面的方法成员到IOC容器
@ConditionalOnMissingBean//保证单例
public AliyunOSSOperator aliyunOSSOperator(AliyunOSSProperties aliyunOSSProperties) {
return new AliyunOSSOperator(aliyunOSSProperties);
}
}
最后一步 resources下建立 META-INF目录下spring目录下org.springframework.boot.autoconfigure.AutoConfiguration.imports文件
已知spring启动类自动装配时会自动扫描所有的文件下(包括自建和导入的第三方库)META-INF目录下spring目录下org.springframework.boot.autoconfigure.AutoConfiguration.imports文件中内容建立为bean对象 即文件中声明的com.aliyun.oss.AliyunOSSAutoConfiguration内容为bean对象
注意 文件路径规定好的 这样才会被扫描 记不住的话我们可以仿照我们pom导入的包的路径建立这个目录结构 如外部库中我们导入了pagehelper等 为啥部分外部库没有这个目录结构 因为无需装配其为bean吧
Spring Boot启动类SpringApplication,通过@EnableAutoConfiguration开启自动装配功能扫描所有META-INF
在Spring Boot 2.7之前为META-INF/spring.factories文件
在Spring Boot 2.7之后为META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件
我们根据这个原理新建目录结构即可 写入com.aliyun.oss.AliyunOSSAutoConfiguration即可
浙公网安备 33010602011771号