自定义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即可

posted on 2025-05-10 20:33  鲟崆  阅读(0)  评论(0)    收藏  举报  来源

导航