【SpringBoot 2】(五)自动配置简析源码 开发中小技巧(一)

简介: 【SpringBoot 2】(五)自动配置简析源码 开发中小技巧(一)

1 自动配置底层分析

1.1 自动配置注解解析

@SpringBootApplication注解是SpringBoot的核心注解,他是由以下三个注解总和而成.


@SpringBootConfiguration

该注解底层有一个@Configuration注解,标明当前类是一个配置类

@EnableAutoConfiguration该注解又由以下两个注解组合而成

@AutoConfigurationPackage:底层使用@Import({Registrar.class})向容器中注册组件,Registrar.class里获取到主程序所在的包并将包下的所有组件导入进来,这也就间接说明了SpringBoot的默认包扫描规则: 主程序(MainApplication)所在的包及这个包的所有子包都会被扫描

image.png

@Import(AutoConfigurationImportSelector.class):AutoConfigurationImportSelector.class下有一个selectImports方法,方法里面又使用getAutoConfigurationEntry内部的getCandidateConfigurations方法获取需要注册的组件都有哪些,getCandidateConfigurations方法里面使用SpringFactoriesLoader.loadFactoryNames内层的loadSpringFactories方法里的getResources(“META-INF/spring.factories”)默认扫描当前系统里面所有jar包META-INF/spring.factories位置下的文件。后面发现spring-boot-autoconfigure-2.3.4.RELEASE.jar包里面也有META-INF/spring.factories文件,文件里面有个EnableAutoConfiguratio配置项写死了spring-boot一启动就要给容器中加载的所有配置类。虽然我们127个场景中自动配置启动的时候默认全部加载所有的xxxxAutoConfiguration,但是最终按照条件装配规则(@Conditional)按需配置。

image.png

@ComponentScan

这个注解定义了包扫描的规则

1.2 修改默认配置

 SpringBoot默认会在底层配好所有的组件,但是如果用户自己配置了以用户的优先。使用@ConditionalOnMissingBean注解判断容器中是否存在该组件的话就使用默认的类进行配置


1.3 总结

● SpringBoot先通过xxxxxAutoConfiguration加载所有的自动配置类

● 每个自动配置类按照条件进行生效,默认都会绑定配置文件指定的值,这个值就在xxxxProperties里面拿,xxxProperties和配置文件进行了绑定。

● 生效的配置类就会给容器中装配很多组件

● 只要容器中有这些组件,相当于这些功能就有了

● 定制化配置

 ○ 用户直接自己@Bean替换底层的组件

 ○ 在创建的配置文件中使用配置项修改默认的配置信息。比如说配置字符编码格式在HttpEncodingAutoConfiguration里的注解中可以得知

image.png

xxxxxAutoConfiguration —> 组件 —>

xxxxProperties里面拿值 ----> application.properties


1.4 最佳实践

 根据上述自动配置原理总结SpringBoot的最佳项目实践流程


引入场景依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>


查看自动配置了哪些组件

默认场景对应的自动配置一般都生效

配置文件中debug=true开启自动配置报告,其中Positive(生效组件)、Negative(不生效组件)以及会显示不生效的原因是什么没有匹配到

修改配置项

参考文档:SpringBoot可能会用到的所有配置项

按照前面的定制化方式自己分析

组件修改

@Bean、@Component……注解

…………业务流程

2 开发小技巧

2.1 Lombok简化开发

第一步: 导入依赖(由于starter启动器中已经配置了版本,于是可以不去再次进行设置)


<dependency>  
  <groupId>org.projectlombok</groupId>  
  <artifactId>lombok</artifactId>
</dependency>


第二步: 搜索安装lombok插件

image.png

第三步: 使用注解进行开发

image.png

JavaBean的注解 使用注解并不会直接自动生成代码,而是在编译期间将注解的方法补上。而且如果需要使用多参但不全构造器的话,没有注解可以完成,需要自己在源码上手写


@NoArgsConstructor: 无参构造器

@AllArgsConstructor: 全参构造器

@ToString: 全参数的toString方法

@Data: getter和setter方法

生成日志

image.png

类上加注解@Slf4j

log.info方法打印日志


相关文章
|
2月前
|
Java 开发者 微服务
手写模拟Spring Boot自动配置功能
【11月更文挑战第19天】随着微服务架构的兴起,Spring Boot作为一种快速开发框架,因其简化了Spring应用的初始搭建和开发过程,受到了广大开发者的青睐。自动配置作为Spring Boot的核心特性之一,大大减少了手动配置的工作量,提高了开发效率。
70 0
|
1天前
|
JavaScript Java 程序员
SpringBoot自动配置及自定义Starter
Java程序员依赖Spring框架简化开发,但复杂的配置文件增加了负担。SpringBoot以“约定大于配置”理念简化了这一过程,通过引入各种Starter并加载默认配置,几乎做到开箱即用。
29 10
SpringBoot自动配置及自定义Starter
|
15天前
|
Java 数据库连接 Maven
最新版 | 深入剖析SpringBoot3源码——分析自动装配原理(面试常考)
自动装配是现在面试中常考的一道面试题。本文基于最新的 SpringBoot 3.3.3 版本的源码来分析自动装配的原理,并在文未说明了SpringBoot2和SpringBoot3的自动装配源码中区别,以及面试回答的拿分核心话术。
最新版 | 深入剖析SpringBoot3源码——分析自动装配原理(面试常考)
|
15天前
|
Java Maven Spring
SpringBoot配置跨模块扫描问题解决方案
在分布式项目中,使用Maven进行多模块开发时,某些模块(如xxx-common)没有启动类。如何将这些模块中的类注册为Spring管理的Bean对象?本文通过案例分析,介绍了两种解决方案:常规方案是通过`@SpringBootApplication(scanBasePackages)`指定扫描路径;推荐方案是保持各模块包结构一致(如com.xxx),利用SpringBoot默认扫描规则自动识别其他模块中的组件,简化配置。
SpringBoot配置跨模块扫描问题解决方案
|
22天前
|
NoSQL Java Redis
Spring Boot 自动配置机制:从原理到自定义
Spring Boot 的自动配置机制通过 `spring.factories` 文件和 `@EnableAutoConfiguration` 注解,根据类路径中的依赖和条件注解自动配置所需的 Bean,大大简化了开发过程。本文深入探讨了自动配置的原理、条件化配置、自定义自动配置以及实际应用案例,帮助开发者更好地理解和利用这一强大特性。
76 14
|
25天前
|
存储 JavaScript 前端开发
基于 SpringBoot 和 Vue 开发校园点餐订餐外卖跑腿Java源码
一个非常实用的校园外卖系统,基于 SpringBoot 和 Vue 的开发。这一系统源于黑马的外卖案例项目 经过站长的进一步改进和优化,提供了更丰富的功能和更高的可用性。 这个项目的架构设计非常有趣。虽然它采用了SpringBoot和Vue的组合,但并不是一个完全分离的项目。 前端视图通过JS的方式引入了Vue和Element UI,既能利用Vue的快速开发优势,
110 13
|
2月前
|
缓存 IDE Java
SpringBoot入门(7)- 配置热部署devtools工具
SpringBoot入门(7)- 配置热部署devtools工具
62 1
SpringBoot入门(7)- 配置热部署devtools工具
|
1月前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
|
2月前
|
XML Java 数据格式
SpringBoot入门(8) - 开发中还有哪些常用注解
SpringBoot入门(8) - 开发中还有哪些常用注解
48 2
|
2月前
|
存储 前端开发 JavaScript
springboot中路径默认配置与重定向/转发所存在的域对象
Spring Boot 提供了简便的路径默认配置和强大的重定向/转发机制,通过合理使用这些功能,可以实现灵活的请求处理和数据传递。理解并掌握不同域对象的生命周期和使用场景,是构建高效、健壮 Web 应用的关键。通过上述详细介绍和示例,相信读者能够更好地应用这些知识,优化自己的 Spring Boot 应用。
46 3
下一篇
开通oss服务