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的依赖传递

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值