SpringBoot2零基础到精通之自动配置底层分析及小技巧
- 更新时间:2022-10-21 08:56:16
- 编辑:蒲弘致
参考资料
- Sharding-Jdbc在springboot中配置 / 2.5 MB / 码小辫 推荐度:
- 《基于SpringBoot实现:Java分布式中间件开发入门与实战》源码文件 配套资源 / 206 MB / 钟林森 推荐度:
- SpringBoot从入门到进阶系列官方手册 / 21.7 MB / 毛黎昕IV 推荐度:
正文内容
SpringBoot2 自动配置
1 自动配置底层分析
1.1 自动配置注解解析
@SpringBootApplication注解是SpringBoot的核心注解,他是由以下三个注解总和而成.
@SpringBootConfiguration
该注解底层有一个@Configuration注解,标明当前类是一个配置类
@EnableAutoConfiguration该注解又由以下两个注解组合而成
- @AutoConfigurationPackage:底层使用@Import({Registrar.class})向容器中注册组件,Registrar.class里获取到主程序所在的包并将包下的所有组件导入进来,这也就间接说明了SpringBoot的默认包扫描规则: 主程序(MainApplication)所在的包及这个包的所有子包都会被扫描
- @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)按需配置。
@ComponentScan 这个注解定义了包扫描的规则
1.2 修改默认配置
SpringBoot默认会在底层配好所有的组件,但是如果用户自己配置了以用户的优先。使用@ConditionalOnMissingBean注解判断容器中是否存在该组件的话就使用默认的类进行配置
1.3 总结
● SpringBoot先通过xxxxxAutoConfiguration加载所有的自动配置类
● 每个自动配置类按照条件进行生效,默认都会绑定配置文件指定的值,这个值就在xxxxProperties里面拿,xxxProperties和配置文件进行了绑定。
● 生效的配置类就会给容器中装配很多组件
● 只要容器中有这些组件,相当于这些功能就有了
● 定制化配置
○ 用户直接自己@Bean替换底层的组件
○ 在创建的配置文件中使用配置项修改默认的配置信息。比如说配置字符编码格式在HttpEncodingAutoConfiguration里的注解中可以得知
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插件
第三步: 使用注解进行开发
JavaBean的注解 使用注解并不会直接自动生成代码,而是在编译期间将注解的方法补上。而且如果需要使用多参但不全构造器的话,没有注解可以完成,需要自己在源码上手写
- @NoArgsConstructor: 无参构造器
- @AllArgsConstructor: 全参构造器
- @ToString: 全参数的toString方法
- @Data: getter和setter方法
生成日志
- 类上加注解@Slf4j
- log.info方法打印日志
2.2 伪热更新
第一步: 导入依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency>
第二步: 使用热更新功能,在项目源码中更新了代码,不需要重启服务器,直接使用Ctrl+F9刷新项目信息,就可以使用更新之后的代码了。静态页面的改变使用Ctrl+F9,就是在服务器中直接更新页面信息,其他的信息改变就相当于使用按钮重启项目。如果想要实现不需任何操作就实时更新的话可以使用JRebel,但是缺点就是收费。
2.3 创建Spring Initailizr项目
这个小技巧就是在使用IDEA的企业版开发的时候,直接创建一个springBoot项目,还可以自定义项目中所需要的技术,创建完成之后就会自动生成SpringBoot项目相应的主程序类、pom.xml文件等
右键创建项目的时候选择Spring Initailizr,主要就是勾选自己需要的技术
效果:
到此这篇关于SpringBoot2零基础到精通之自动配置底层分析及小技巧的文章就介绍到这了,更多相关SpringBoot2 自动配置内容请搜索码农之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持码农之家!
SpringBoot相关教程
-
SpringBoot缓存Ehcache的使用详解
EhCache、Redis比较常用,使用Redis的时候需要先安装Redis服务器,本文给大家介绍SpringBoot缓存Ehcache的使用详解,感兴趣的朋友跟随小编一起看看吧
发布时间:2022-04-24
-
Springboot Oauth2 Server搭建Oauth2认证服务步骤分享
这篇文章主要介绍了Springboot Oauth2 Server 搭建Oauth2认证服务,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
发布时间:2020-02-02
-
springboot中使用定时任务的具体方法
这篇文章主要介绍了如何在springboot中使用定时任务,帮助大家更好的理解和使用springboot框架,感兴趣的朋友可以了解下
发布时间:2021-05-22
-
SpringBoot添加单元测试实例
本篇文章主要介绍了详解SpringBoot之添加单元测试,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
发布时间:2021-04-27
-
SpringBoot 2.0 整合sharding-jdbc中间件实现数据分库分表示例效果
这篇文章主要介绍了SpringBoot 2.0 整合sharding-jdbc中间件,实现数据分库分表,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
发布时间:2020-01-26
-
SpringBoot+layui实现文件上传功能的实例讲解
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。这篇文章主要介绍了SpringBoot+layui实现文件上传,需要的朋友可以参考下
发布时间:2019-10-29
-
SpringBoot2.0 ZipKin实例及代码讲解
这篇文章主要介绍了SpringBoot2.0 ZipKin示例代码,详细的介绍了什么是ZipKin以及SpringBoot2.0 ZipKin示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
发布时间:2021-05-26
-
SpringBoot使用统一异常处理实例讲解
这篇文章主要为大家详细介绍了SpringBoot使用统一异常处理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
发布时间:2019-08-11
-
springboot多环境(dev、test、prod)如何配置
这篇文章主要介绍了springboot多环境(dev、test、prod)配置详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
发布时间:2019-08-13
-
JAVA快速搭建基本的springboot
本文主要入门者介绍怎么搭建一个基础的springboot环境,本文通过图文并茂的形式给大家介绍从spring boot到spring cloud的完美搭建过程,适用java入门教学,需要的朋友可以参考下
发布时间:2021-05-28