《SpringBoot系列七》:SprinBoot自定义自动装配类与xxx-spring-boot-starter

简介: 《SpringBoot系列七》:SprinBoot自定义自动装配类与xxx-spring-boot-starter

一、前言

最近在搞一个SDK,在写接入文档时,需要让业务模块引入MvcInterceptor和MyBatisPlugin,因此有如下内容:

  1. 在启动类@SpringBootApplication注解中配置扫描包路径:io.terminus.parana.log.sdk
@SpringBootApplication(scanBasePackages = {"io.xxx.xx", "io.xxx.log.sdk"})
  1. 或 在启动类中通过@Import注解注入MvcInterceptor.class
@Import(MvcInterceptor.class)
@SpringBootApplication
public class XxxxApplication {
}

正好最近在三刷《Spring Boot编程思想(核心篇)》,反想那么多Spring生态组件,它们为什么不需要添加扫描包路径 或 通过@Import注解在启动类导入XxxClass,由此想到可以自定义自动装配类;

二、自定义自动装配类

SpringBoot自动装配的命名规则:

  • 自动装配Class类应命名为:XxxAutoConfiguration
  • 自动装配package命名模式: ${root-package}.autoconfigure.${module-package},比如:
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration

1)配置类

/**
 * 导入MvcConfig类
 */
@Configuration
@Import({InterceptorConfig.class})
public class TraceInterceptorAutoConfiguration {

    /**
     * mybatis 自定义拦截器
     */
    @Bean
    @ConditionalOnMissingClass("io.xxx.log.sdk.config.mybatis.MybatisInterceptor")
    public Interceptor getInterceptor() {
        return new MybatisInterceptor();
    }
}

2)在resources目录下新建META-INF/spring.factories文件:

org.springframework.boot.autoconfigure.EnableAutoConfiguration = \
com.saint.autoconfigure.TraceInterceptorAutoConfiguration

在这里插入图片描述
到这里自定义自动装配类也就结束了,感觉就贼简单。实际上关键点在于META-INF/spring.factories文件,SpringBoot在做自动配置时会去扫描所有的META-INF/Spring.factories配置文件。

我们在https://mvnrepository.com/上可以发现很多的spring-boot-starter-xxx;我们是不是可以自己搞一个呢?
在这里插入图片描述
下面我就自己搞一个;

三、自定义xxx-spring-boot-starter

starter命名模式 --> ${module}-spring-boot-starter;

3)接着上面的自定义自动装配类,我们在其同一工程下对其pom.xml文件进行修改:

....
<parent>
    <artifactId>springbootstarter</artifactId>
    <groupId>com.saint</groupId>
    <version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>traceInterceptor-spring-boot-starter</artifactId>
<dependencies>

    <!-- Spring Boot Starter 基础依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <!-- 表明不传递spring-boot-starter依赖 -->
        <optional>true</optional>
    </dependency>
    
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <!-- 表明不传递spring-boot-starter依赖 -->
        <optional>true</optional>
    </dependency>

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <scope>test</scope>
    </dependency>

</dependencies>
....

4)在其他项目(比如:auto-configure-sample)中引入starter:

<dependency>
    <groupId>com.saint</groupId>
    <artifactId>traceInterceptor-spring-boot-starter</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>

OK,这样其他项目就可以使用到traceInterceptor-spring-boot-starter中自动装配的类了。

注意:在自定义的starter 的pom中,将spring-boot-starter的maven依赖声明为<optional>true</optional>,表明formatter-spring-boot-starter(自定义starter)不应该传递spring-boot-starter依赖;否则会将spring-boot-starter版本固定,导致引用自定义starter的应用出现版本冲突问题。

相关文章
|
5月前
|
安全 Java 决策智能
Spring Boot自动装配
Spring Boot自动装配基于“约定优于配置”理念,通过条件化配置与Starters机制,智能推断并加载所需组件,大幅简化开发流程。它实现配置自动化,提升效率,降低维护成本,支持自定义扩展,推动微服务快速构建,是Java生态中开发范式的革新之作。(238字)
|
5月前
|
前端开发 Java 应用服务中间件
《深入理解Spring》 Spring Boot——约定优于配置的革命者
Spring Boot基于“约定优于配置”理念,通过自动配置、起步依赖、嵌入式容器和Actuator四大特性,简化Spring应用的开发与部署,提升效率,降低门槛,成为现代Java开发的事实标准。
|
5月前
|
前端开发 Java 微服务
《深入理解Spring》:Spring、Spring MVC与Spring Boot的深度解析
Spring Framework是Java生态的基石,提供IoC、AOP等核心功能;Spring MVC基于其构建,实现Web层MVC架构;Spring Boot则通过自动配置和内嵌服务器,极大简化了开发与部署。三者层层演进,Spring Boot并非替代,而是对前者的高效封装与增强,适用于微服务与快速开发,而深入理解Spring Framework有助于更好驾驭整体技术栈。
|
5月前
|
XML Java 应用服务中间件
【SpringBoot(一)】Spring的认知、容器功能讲解与自动装配原理的入门,带你熟悉Springboot中基本的注解使用
SpringBoot专栏开篇第一章,讲述认识SpringBoot、Bean容器功能的讲解、自动装配原理的入门,还有其他常用的Springboot注解!如果想要了解SpringBoot,那么就进来看看吧!
620 2
|
6月前
|
人工智能 Java 机器人
基于Spring AI Alibaba + Spring Boot + Ollama搭建本地AI对话机器人API
Spring AI Alibaba集成Ollama,基于Java构建本地大模型应用,支持流式对话、knife4j接口可视化,实现高隐私、免API密钥的离线AI服务。
5372 2
基于Spring AI Alibaba + Spring Boot + Ollama搭建本地AI对话机器人API
存储 JSON Java
767 0
|
6月前
|
监控 安全 Java
使用 @HealthEndpoint 在 Spring Boot 中实现自定义健康检查
Spring Boot 通过 Actuator 模块提供了强大的健康检查功能,帮助开发者快速了解应用程序的运行状态。默认健康检查可检测数据库连接、依赖服务、资源可用性等,但在实际应用中,业务需求和依赖关系各不相同,因此需要实现自定义健康检查来更精确地监控关键组件。本文介绍了如何使用 @HealthEndpoint 注解及实现 HealthIndicator 接口来扩展 Spring Boot 的健康检查功能,从而提升系统的可观测性与稳定性。
493 0
使用 @HealthEndpoint 在 Spring Boot 中实现自定义健康检查
|
6月前
|
人工智能 Java 开发者
【Spring】原理解析:Spring Boot 自动配置
Spring Boot通过“约定优于配置”的设计理念,自动检测项目依赖并根据这些依赖自动装配相应的Bean,从而解放开发者从繁琐的配置工作中解脱出来,专注于业务逻辑实现。
2208 0

热门文章

最新文章