Spring Boot Starter工程如何快速定位自动化配置类

简介: Spring Boot Starter工程如何快速定位自动化配置类

前言


现在Spring Boot越来越流行,而各种Spring Boot Starter工程由于其提供的自动化配置的特性,极大的提高了我们的开发速度。但同时也给定位问题,了解实现原理带来了一定的困难。 而要了解Spring Boot Starter工程的底层原理,最核心的就是找到工程中的自动化配置类。 本文根据自己的开发经验,总结以下快速定位自动化配置类的方法。

由于最近在进行gateway的改造,就以 spring-cloud-starter-gateway来说明.

<dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-gateway</artifactId>
  </dependency>


一、根据自动化配置的类名前缀搜索


一般自动化配置类会根据Maven依赖中的artifactId里面的名称来命令。

比如:spring-cloud-starter-gateway,表示这个依赖项目是gateway网关依赖包,一般对应的自动化配置类会以Gateway开头。

在idea中,直接双击Shift搜索Gateway开头的类就能很轻易的发现GatewayAutoConfiguration类。

56.png


二、根据启用注解查找


自动化配置实现原理里面提到过,一般有2种实现方式。

第一种是在META-INF目录下的spring.factories配置org.springframework.boot.autoconfigure.EnableAutoConfiguration属性指定自动化配置文件。

第二种是通过@Enable***启动注解来注入自动化配置文件。

比如@EnableDiscoveryClient,@EnableOpenApi,@EnableSwagger2

<dependency>
        <groupId>io.springfox</groupId>
          <artifactId>springfox-boot-starter</artifactId>
          <version>3.0.0</version>
      </dependency>


要启动springfox-boot-starter的自动化配置特性,需要在启动类上添加@EnableOpenApi注解。

@SpringBootApplication(exclude = {
        GatewayDiscoveryClientAutoConfiguration.class
})
@EnableDiscoveryClient
@Slf4j
@EnableOpenApi
public class WxswjGatewayApplication {
    public static void main(String[] args) {
        SpringApplication.run(WxswjGatewayApplication.class, args);
        log.info("网关服务启动成功!");
    }
}


在idea中,点击@EnableOpenApi注解,观察@Import注解导入的自动化配置类OpenApiDocumentationConfiguration.class

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Documented
@Import({OpenApiDocumentationConfiguration.class})
public @interface EnableOpenApi {
}


三、根据对应的配置属性定位


一般导入Spring Boot Starter工程的依赖后,都会调整一些对应的配置属性。我们可以根据配置属性来定位相关的自动化配置类。


下面是gateway网关集成注册中心的相关配置


#配置网关的默认路由
spring.cloud.gateway.enabled=true
spring.cloud.gateway.discovery.locator.enabled=true
spring.cloud.gateway.discovery.locator.lower-case-service-id=true


点击属性spring.cloud.gateway.discovery.locator.enabled,会跳转到DiscoveryLocatorProperties 属性配置文件中。

@ConfigurationProperties("spring.cloud.gateway.discovery.locator")
public class DiscoveryLocatorProperties {
    private boolean enabled = false;
    private String routeIdPrefix;
    private String includeExpression = "true";
    private String urlExpression = "'lb://'+serviceId";
    private boolean lowerCaseServiceId = false;
    private List<PredicateDefinition> predicates = new ArrayList();
    private List<FilterDefinition> filters = new ArrayList();
    public DiscoveryLocatorProperties() {
    }
    public boolean isEnabled() {
        return this.enabled;
    }
    public void setEnabled(boolean enabled) {
        this.enabled = enabled;
    }
    ……

然后点击IDEA中的文件定位按钮,快速定位到相关配置属性类和自动化配置文件GatewayDiscoveryClientAutoConfiguration

54.png

55.png


四、根据依赖包查找


根据依赖包的名称spring-cloud-starter-gateway,在工程的maven依赖下,找到对应的工程,展开查看。

可以通过在META-INF目录下的spring.factories配置org.springframework.boot.autoconfigure.EnableAutoConfiguration属性查看相关的自动化配置文件。

也可以直接查看config目录下的自动化配置文件。

53.png


五、四种方法对比


第一种方法直接通过自动化配置名称搜索是最方便的方式,当然前提是引入的Spring Boot Starter工程的自动化配置类的命名符合规范。


第二种方式通过类似@EnableSwagger2的启动注解来定位自动化配置类,只适用采用@EnableXXX注入自动化配置类实现自动化配置的项目。


第三种方式利用相关的配置属性来定位实现自动化配置类,这种方式最精准,能根据相关功能的配置直接定位到对应功能的自动化配置类。

比如在研究gateway网关怎么和注册中心整合的时候,如果通过上面的2种方式,很难定位到对应功能的自动化配置类GatewayDiscoveryClientAutoConfiguration。而根据配置属性spring.cloud.gateway.discovery.locator.enabled,可以很轻松的定位到自动化配置类。

所以相对来说,前2种方式更适合定位总的自动化配置入口,方式三适合精准定位。


第四种方式是最原始的一种傻瓜式查找操作,如果项目的maven依赖非常多,根据依赖包的名称找对应的依赖工程就容易眼花缭乱,不推荐。


总结


本文主要是总结了4种快速定位Spring Boot Starter工程的自动化配置类的方法。


在学习spring boot的过程中,大家首先要熟悉Spring Boot的自动化配置原理,这样就很容易理解Spring Boot Starter工程的实现原理。


然后在实际开发中,通过快速定位Spring Boot Starter工程对应的自动化配置类XXXAutoConfiguration查看相关源码,可以帮助我们理解其内部的实现原理,方便更深入的定制开发和问题定位。

目录
相关文章
|
11天前
|
存储 Java 数据安全/隐私保护
|
5天前
|
Java 微服务 Spring
Spring Boot中获取配置参数的几种方法
Spring Boot中获取配置参数的几种方法
18 2
|
7天前
|
消息中间件 安全 Java
在Spring Bean中,如何通过Java配置类定义Bean?
【4月更文挑战第30天】在Spring Bean中,如何通过Java配置类定义Bean?
16 1
|
9天前
|
Java 开发者 Spring
Spring Boot中的资源文件属性配置
【4月更文挑战第28天】在Spring Boot应用程序中,配置文件是管理应用程序行为的重要组成部分。资源文件属性配置允许开发者在不重新编译代码的情况下,对应用程序进行灵活地配置和调整。本篇博客将介绍Spring Boot中资源文件属性配置的基本概念,并通过实际示例展示如何利用这一功能。
21 1
|
11天前
|
安全 Java 测试技术
Spring Boot 自动化单元测试类的编写过程
企业开发不仅要保障业务层与数据层的功能安全有效,也要保障表现层的功能正常。但是我们一般对表现层的测试都是通过postman手工测试的,并没有在打包过程中代码体现表现层功能被测试通过。那么能否在测试用例中对表现层进行功能测试呢?答案是可以的,我们可以使用MockMvc来实现它。
36 0
|
12天前
|
Java Spring 容器
如何用基于 Java 配置的方式配置 Spring?
如何用基于 Java 配置的方式配置 Spring?
|
2月前
|
Java 应用服务中间件 Maven
SpringBoot 项目瘦身指南
SpringBoot 项目瘦身指南
49 0
|
2月前
|
缓存 安全 Java
Spring Boot 面试题及答案整理,最新面试题
Spring Boot 面试题及答案整理,最新面试题
131 0
|
1月前
|
存储 JSON Java
SpringBoot集成AOP实现每个接口请求参数和返回参数并记录每个接口请求时间
SpringBoot集成AOP实现每个接口请求参数和返回参数并记录每个接口请求时间
37 2
|
2月前
|
前端开发 搜索推荐 Java
【Spring底层原理高级进阶】基于Spring Boot和Spring WebFlux的实时推荐系统的核心:响应式编程与 WebFlux 的颠覆性变革
【Spring底层原理高级进阶】基于Spring Boot和Spring WebFlux的实时推荐系统的核心:响应式编程与 WebFlux 的颠覆性变革