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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/64915.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flutter Intl包使用指南:实现国际化和本地化

Flutter Intl包使用指南:实现国际化和本地化 简介 intl 是Dart的国际化(i18n)和本地化(l10n)库,它提供了丰富的功能来支持多语言应用的开发。intl 包能够处理消息翻译、复数和性别的智能处理、日期和数字…

python 定时任务管理封装

主逻辑代码 # -*- coding: utf-8 -*- # import apscheduler import pandas as pd from datetime import datetime # 导入调度器,此处使用BackgroundScheduler阻塞调度器 from apscheduler.schedulers.background import BackgroundScheduler # 导入触发器&#xf…

APP投放的归因框架设计

一、归因相关概念回顾 在广告归因简介中我们介绍常见的归因模型和归因方法,我们先来回顾一下: 1. 背景 2. 设备标识 3. 归因模型 归因模型的多样性意味着每种模型都有其独特的优势和局限。关键在于选择一个与您的业务场景相匹配的模型,并且…

跨站脚本攻击之基本介绍

一.基本概念 跨站脚本(Cross-site scripting,简称XSS),是指攻击者往Web页面里插入恶意代码,当用户浏览该页之时,嵌入其中Web页面的HTML代码会被执行,从而达到恶意攻击用户的目的。 为什么称为x…

Kunlun 2280服务器(ARM)Raid卡磁盘盘符漂移问题解决

一、问题描述 1、服务器:Kunlun 2280服务器 ARM 2、操作系统:Euler2.0Sp10 Arm 3、Raid卡型号:MeGaRAID 9560-8i 4、Raid配置:2块配置Raid1作为系统盘,剩余磁盘配置Raid5 作为数据盘 二、问题现象 1、使用IBMC页面配置Raid卡,1个Raid1 系统盘和1个Raid5数…

[搜广推]王树森推荐系统——Deep Retrieval 召回

Deep Retrieval 简介 Deep Retrieval 是一种推荐系统框架,它将物品表示为路径(path),并在线上查找与用户最匹配的路径。 这种方法与传统的双塔模型不同,后者通常将用户和物品表示为向量,并在线上进行最近邻…

RabbitMQ 的7种工作模式

RabbitMQ 共提供了7种⼯作模式,进⾏消息传递,. 官⽅⽂档:RabbitMQ Tutorials | RabbitMQ 1.Simple(简单模式) P:⽣产者,也就是要发送消息的程序 C:消费者,消息的接收者 Queue:消息队列,图中⻩⾊背景部分.类似⼀个邮箱,可以缓存消息;⽣产者向其中投递消息,消费者从其中取出消息…

PCIe_Host驱动分析_设备枚举

往期内容 本文章相关专栏往期内容,PCI/PCIe子系统专栏: 嵌入式系统的内存访问和总线通信机制解析、PCI/PCIe引入 深入解析非桥PCI设备的访问和配置方法 PCI桥设备的访问方法、软件角度讲解PCIe设备的硬件结构 深入解析PCIe设备事务层与配置过程 PCIe的三…

Python 标准库:string——字符串操作

文章目录 模块介绍主要常量主要类- Formatter- Template 主要函数- capwords()- Template.substitute()- Formatter.format() 模块介绍 string 模块提供了许多与字符串操作相关的常量和函数。它主要用于处理字符串,包括字符集合、格式化操作和其他与字符串相关的功…

深入浅出:多功能 Copilot 智能助手如何借助 LLM 实现精准意图识别

阅读原文 1. Copilot中的意图识别 如果要搭建一个 Copilot 智能助手,比如支持 知识问答、数据分析、智能托管、AIGC 等众多场景或能力,那么最核心的就是基于LLM进行意图识别分发能力,意图识别的准确率直接决定了 Copilot 智能助手的能力上限…

Echarts之yAxis属性超超超级详情版学习

yAxis 属性说明类型id组件idstringshow是否显示y轴booleanalignTicks在多个 y 轴为数值轴的时候,可以开启该配置项自动对齐刻度。只对value和log类型的轴有效booleanpositiony 轴的位置stringoffsetY 轴相对于默认位置的偏移,在相同的 position 上有多个…

Jo-im开发:用于WebRTC的ICE中继服务器Coturn搭建

前言 本人计划开发一套具备文本、语音、视频通话功能的IM demo,同时具备多人在线会议功能,按习惯大概会开源版定义名称为Duihao jo-im,本案主要用于实现语音视频通话的基础组件支撑。因为我们选择基于WebRTC实现IM中语音、视频通话&#xff…

【CVE-2024-53375】TP-Link Archer系列路由器认证操作系统命令注入(内附远离和代码利用)

CVE-2024-53375 TP-Link Archer系列路由器认证操作系统命令注入 受影响的设备 使用 HomeShield 功能的 TP-Link 设备容易受到此漏洞的影响。这包括 TP-Link Archer 系列的多款路由器。 经过测试 Archer AXE75(EU)_V1_1.2.2 Build 20240827(发布日期 2024 年 11 月 4 日)…

程控电阻箱应用中需要注意哪些安全事项?

程控电阻箱是一种用于精确控制电路中电流和电压的电子元件,广泛应用于电子实验、测试设备以及精密测量仪器中。在应用程控电阻箱时,为确保安全和设备的正常运行,需要注意以下几个安全事项: 1. 正确连接:确保电阻箱与电…

Promise链式调用

Promise链式调用 上一篇我们实现了通过promise的方式实现获取国家基本信息,本次我们来使用promise链式调用来实现邻国的展现 首先,我们从第一个国家中获取到邻国的国家代码名称 const neighbour data[0].borders[0];然后我们通过fetch来获取邻国信息&a…

基于自定义注解与 AOP 切面实现接口日志全面数据库存储

基于自定义注解与 AOP 切面实现接口日志全面数据库存储 一、引言 在当今复杂的软件系统开发与运维过程中,详细且精准地记录接口的各项信息对于系统性能监测、问题排查、安全审计以及业务分析都有着极为关键的意义。本文将深入讲解如何运用自定义注解与 AOP&#x…

Elasticsearch相关知识@1

目录标题 Lucene1. **什么是 Lucene?**2. **Lucene 在 Elasticsearch 中的作用**3. **Lucene 的核心功能**(1) **倒排索引**(2) **分词**(3) **查询解析**(4) **相关性评分** 4. **为什么 Elasticsearch 使用 Lucene?**5. **Lucene 和 Elasticsearch 的区别**6. **总结** 分片…

Cesium材质——Material

简介: Cesium.Material对象的目的,就是生成一段名称为czm_getMaterial的函数(示例代码如下), 这个czm_getMaterial函数,是shader代码,会被放到片元着色器中使用。 czm_material czm_getMater…

UE5 渲染管线 学习笔记

兰伯特 SSS为散射的意思 带Bias的可以根据距离自动切换mip的卷积值 而带Level的值mipmaps的定值 #define A8_SAMPLE_MASK .a 这样应该就很好理解了 这个只采样a通道 带Level的参考上面的 朝左上和右下进行模糊 带Bias参考上面

1114 Family Property (25)

This time, you are supposed to help us collect the data for family-owned property. Given each persons family members, and the estate(房产)info under his/her own name, we need to know the size of each family, and the average area and n…