SpringBoot核心:自动配置

有使用过SSM框架的,还记得曾经在spring-mybatis.xml配置了多少内容吗?数据源、连接池、会话工厂、事务管理···,而现在Spring Boot告诉你这些都不需要了,简单的几个注解统统搞定,是不是很方便!

前言

SpringBoot的自动装配(Auto-configuration)是其核心特性之一,旨在简化应用程序的配置过程。通过自动装配,能够根据类路径中的依赖关系自动配置 Spring 应用程序上下文,容器启动后,一些配置类、bean对象自动存入到了IOC容器中,不需要我们去手动声明,从而简化了开发,省去了繁琐的配置操作。这大大减少了开发者需要手动配置的内容,使得应用程序开发变得更加容易。

□ 自动配置的优势

1. 简化配置

减少了大量重复性的、模板化的配置代码,使项目结构更加简洁,通过自动检测和配置依赖项,开发者可以更快地搭建起一个功能完备的应用程序,无需从头开始编写复杂的配置文件。

2. 提高生产力

减少了手动配置的工作,即减少了配置错误的可能性,提高应用程序的稳定性,同时降低了学习曲线,开发人员能够更专注于业务逻辑开发。

3. 增强可维护性

自动配置确保了所有使用相同依赖的项目都遵循一致的配置标准,通过查看 application.properties 或 application.yml 文件以及相关注释,其他开发者更容易理解应用的配置意图。

4. 灵活可控

可以根据项目需要,选择最适合当前环境的配置

□ 自动配置核心

  • 起步依赖

    在没有使用springboot之前,项目中需要引入很多依赖jar,然而使用springboot之后只需要引入一个spring-boot-starter-web,为什么?难道不需要了?先看一下这个jar包依赖的其他jar,如下图:

    图中我看可以看出spring-boot-starter-web所依赖jar,不仅包含Tomcat、JSON还有spring-webmvc、spring-aop、spring-context等,因此可以看出并不是不需要,而是依托Maven的依赖传递简化了。

  • 自动装配

    一个SpringBoot工程想要成功运行,就必须拥有一个被@SpringBootApplication 注解标识的主程序类,为什么一个 @SpringBootApplication注解就能完成?点进注解看一下,如图:

    核心注解包含三个

    a. @SpringBootConfiguration

    使用@Configuration修饰这个注解。代表当前这个注解是一个配置类

    b. @ComponentScan

    用于扫描组件,相当于context:component-scan,可以指定多个路径,将需要扫描装配路径中的所有spring组件;默认扫描该类所在包及其子包下所有带有指定注解的类,将它们自动装配到bean容器中,会被自动装配的注解包括@Controller、@Service、@Component、@Repository等。也可以指定扫描路径。

    c. @EnableAutoConfiguration

    开启自动导包配置注解,点进去之后发现里面核心注解是@AutoConfigurationPackage和@Import(AutoConfiguration***.class),而使用@Import导入的类会被Spring加载到IOC容器中。这里导入了AutoConfigurationImportSelector类。这个类中有一个非常重要的方法------selectImports(),它几乎涵盖了组件自动装配的所有处理逻辑,包括获得候选配置类、配置类去重、排除不需要的配置类、过滤等,最终返回符合条件的自动配置类的全限定名数组。逻辑大致如下:

    ● 从配置文件META-INF/spring.factories加载所有可能用到的自动配置类;

    ● 去重,并将exclude和excludeName属性携带的类排除;

    ● 过滤,将满足条件(@Conditional)的自动配置类返回;

总结

spring boot的两个核心特性:起步依赖和自动配置

起步依赖的原理:maven的依赖传递

自动配置的原理:条件注入

相关推荐
2401_8848107427 分钟前
maven笔记
java·笔记·maven
霸王龙的小胳膊28 分钟前
SpringMVC-登录校验
java·mvc
字节源流29 分钟前
【SpringMVC】常用注解:@PathVariable
java·开发语言·servlet
小安同学iter34 分钟前
SpringMVC(五)拦截器
java·开发语言·spring boot·spring·java-ee
鱼樱前端36 分钟前
前端程序员集体破防!AI工具same.dev像素级抄袭你的代码,你还能高傲多久?
前端·javascript·后端
栀栀栀栀栀栀1 小时前
JVM 2015/3/15
java·开发语言·jvm
梁萌1 小时前
搭建Spring Boot Admin监控系统
spring boot·监控·admin·springbootadmin
羊思茗5201 小时前
Spring Boot中@Valid 与 @Validated 注解的详解
java·spring boot·后端
尤宸翎1 小时前
Julia语言的饼图
开发语言·后端·golang
老朋友此林1 小时前
Redisson 实现分布式锁源码浅析
java·redis·分布式