SpringBoot 的自动装配特性

news2024/11/24 17:57:00

在这里插入图片描述

1. Spring Boot 的自动装配特性

Spring Boot 的自动装配(Auto-Configuration)是一种特性,它允许您在应用程序中使用默认配置来自动配置 Spring Framework 的各种功能和组件,从而减少了繁琐的配置工作。通过自动装配,您可以更快速地搭建和开发应用程序,同时还可以通过覆盖默认配置来适应特定的需求。

自动装配的核心思想是根据应用程序的依赖和配置来自动配置 Spring Bean,以及提供一些默认的行为,从而实现最佳实践和约定优于配置的原则。以下是一些关键概念和使用方式:

  1. 启动器(Starters):Spring Boot 启动器是预定义依赖集合,用于简化特定类型应用的开发。启动器通常包括所需的库、框架和配置,让您可以更轻松地开始开发特定类型的应用,例如 spring-boot-starter-web 用于构建 Web 应用。
  2. 自动配置类:Spring Boot 提供了许多自动配置类,这些类会根据应用程序的依赖和配置自动创建 Spring Bean。例如,DataSourceAutoConfiguration 会根据配置自动创建数据库数据源 Bean。
  3. 条件化装配:Spring Boot 使用条件化装配来决定是否应该自动配置特定的 Bean。可以使用 @ConditionalOn... 注解来定义条件,如 @ConditionalOnClass@ConditionalOnProperty 等。
  4. 自定义配置:如果默认的自动配置不符合您的需求,您可以通过在应用程序中提供自定义的配置来覆盖或扩展默认行为。通过创建 @Configuration 类并定义 Bean,可以完全控制 Bean 的创建和配置。
  5. 禁用自动配置:如果您不希望使用某些自动配置,可以使用 @EnableAutoConfiguration 注解的 exclude 属性或在 application.properties 文件中使用属性来禁用它们。
  6. 自定义启动器:如果您要构建和共享自己的自动配置和依赖集合,可以创建自定义的 Spring Boot 启动器,让其他开发者可以更方便地使用您的功能。

Spring Boot 的自动装配大大简化了项目的配置和开发流程,但需要注意在某些情况下需要额外的配置或修改来满足特定的需求。您可以根据应用程序的需求灵活使用自动装配和自定义配置。

2. 以web开发为例

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

</dependencies>

2.1 自动配好Tomcat

引入Tomcat依赖。启动配置Tomcat

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-tomcat</artifactId>
      <version>2.1.5.RELEASE</version>
      <scope>compile</scope>
</dependency>

2.2 自动配好SpringMVC

自动配好SpringMVC常用组件(功能)例如:dispatcherServlet

<dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.1.7.RELEASE</version>
      <scope>compile</scope>
</dependency>

2.3 自动配好Web常见功能

SpringBoot帮我们配置好了所有web开发的常见场景,如:字符编码问题

<dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>5.1.7.RELEASE</version>
      <scope>compile</scope>
</dependency>

2.4 默认的包结构

  • 主程序所在包及其下面的所有子包里面的组件都会被默认扫描进来
  • 想要改变扫描路径,@SpringBootApplication(scanBasePackages="com.atguigu")或者@ComponentScan 指定扫描路径
@SpringBootApplication
等同于
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan("com.atguigu.boot")

2.5 各种配置拥有默认值

  • 所谓自动装配就是初始化各种bean(依据场景启动器start创建),加入IOC容器。
  • 默认配置最终都是映射到某个类上,这个类会在容器中创建对象。如:MultipartProperties
  • SpringBoot所有的自动配置功能都在 spring-boot-autoconfigure 包里面

查看容器中的组件:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import tk.mybatis.spring.annotation.MapperScan;

@MapperScan(basePackages = "com.XXX.mapper")
@SpringBootApplication
public class BootStrapApplication {

    public static void main(String[] args) {
        try {
            /**
             * 返回IOC容器
             */
            ConfigurableApplicationContext applicationContext = SpringApplication.run(BootStrapApplication.class, args);
            /**
             * 查看容器中所有组件
             */
            String[] beanDefinitionNames = applicationContext.getBeanDefinitionNames();
            for (String beanDefinitionName : beanDefinitionNames) {
                System.out.println(beanDefinitionName);
            }
        } catch (Exception e){
            e.printStackTrace();
            System.exit(-1);
        }

    }
}

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

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

相关文章

算法40:移动零

一、需求 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0]示例 2: 输入: nums …

opencv 基础54-利用形状场景算法比较轮廓-cv2.createShapeContextDistanceExtractor()

注意&#xff1a;新版本的opencv 4 已经没有这个函数 cv2.createShapeContextDistanceExtractor() 形状场景算法是一种用于比较轮廓或形状的方法。这种算法通常用于计算两个形状之间的相似性或差异性&#xff0c;以及找到最佳的匹配方式。 下面是一种基本的比较轮廓的流程&…

B2B2C多商户电子商务网站开发--海外商城系统搭建

一、明确目标与需求 在开始搭建海外商城系统之前&#xff0c;企业需要明确自己的目标和需求。例如&#xff0c;要面向哪些国家和地区、主要销售哪些产品、需要提供哪些语言和货币支持等。这些目标和需求将有助于企业制定合理的开发计划和方案。 二、选择合适的开发平台和工具…

【安装部署】Mysql下载及其安装的详细步骤

1.下载压缩包 官网地址&#xff1a;www.mysql.com 2.环境配置 1.先解压压缩包 2.配置环境变量 添加环境变量&#xff1a;我的电脑--->属性-->高级-->环境变量-->系统变量-->path 3.在mysql安装目录下新建my.ini文件并&#xff0c;编辑my.ini文件 编辑内容如…

Linux常规操作命令

日升时奋斗&#xff0c;日落时自省 目录 1、vim 1.1、工作模式 1.2、末行模式操作相关命令 1.2.1、保存退出操作 1.2.2、查找替换 1.3、输入模式操作相关命令 1.3.1、移动相关命令 1.3.2、删除和剪切命令 1.3.3、复制操作 1.3.4、撤销 2、head 3、tail 4、ps 5、…

HTTP代理与HTTPS代理请求的方式揭秘

今天&#xff0c;我们要一起来揭秘HTTP代理与HTTPS代理请求的方式&#xff0c;帮助大家更好地理解和使用这两种代理。我们将分析它们的不同之处&#xff0c;并提供一些实际的例子和操作经验&#xff0c;让你轻松玩转网络请求&#xff01; HTTP代理请求方式&#xff1a; HTTP代…

IBM Spectrum LSF 分布式系统(作业调度系统),提高高性能计算(HPC)的价值

IBM Spectrum LSF Suites 凭借更快的处理和更轻松的处理&#xff0c;提高高性能计算的价值 要点 通过隐藏工作负载密集型计算环境的复杂性&#xff0c;提高用户生产效率简化计算集群管理并划分工作负载优先级&#xff0c;以快速满足竞争激烈的行业瞬息万变的需求通过优化系统…

LLM - CUDA out of memory. 到底怎么事

目录 一.引言 二.报错日志 1.日志数据 2.日志提示 ◆ max_split_size_mb ◆ See documentation ◆ 更多解决方案 三.日志扩展 1.Reserved Memory 是什么&#xff1f; 2.Tired to allocate 小于 free MiB 就会报 OOM 嘛? 3.already allocated 是当前任务占用内存&a…

【高危】 Microsoft Teams 远程代码执行漏洞

漏洞描述 Microsoft Teams 是微软推出的一款团队协作平台&#xff0c;提供了聊天、通话、在线会议、文件共享等功能。 Microsoft Teams 受影响版本中&#xff0c;当用户加入攻击者设置的恶意 Microsoft Teams 会议时&#xff0c;攻击者可远程执行任意代码。 漏洞名称Microso…

游戏类APP的如何设置广告场景最大化用户价值?提升变现收益?

最近几年&#xff0c;游戏类市场的不断增长激发了广告主预算的不断投入&#xff0c;越来越多的游戏类APP通过广告变现的方式增收&#xff0c;并且获得持续上涨的eCPM。 具有潜力的游戏品类参考 根据游戏品类的增长数据和广告收益规模&#xff0c;休闲/模拟/街机均为收益正向的…

Echarts 让饼图中间文字居中并自适应图表

背景&#xff1a; 产品提出需求在饼图中间放两行文字且居中 “简单&#xff0c;劈劈啪啪写完了” 产品再提出你这个没有自适应啊&#xff0c;屏幕放大、缩小你这个就没有居中了&#xff0c;甚至会和饼图重叠 “emmmmm…" UI图如下&#xff1a; 方案一&#xff1a;使用ti…

数据结构和算法——哈希查找冲突处理方法(开放地址法-线性探测、平方探测、双散列探测、再散列,分离链接法)

目录 开放地址法&#xff08;Open Addressing&#xff09; 线性探测&#xff08;Linear Probing&#xff09; 散列表查找性能分析 平方探测&#xff08;Quadratic Probing&#xff09; 定理 平方探测法的查找与插入 双散列探测法&#xff08;Double Hashing&#xff09…

【C语言】经典题目(四)

HI&#xff0c;大家好~&#x1f61d;&#x1f61d;这是一篇C语言经典题目的博客。 更多C语言经典题目及刷题篇&#xff0c;可以参考&#xff1a; &#x1f338; 【C语言】经典题目(一) &#x1f338; 【C语言】经典题目(二) &#x1f338; 【C语言】经典题目(三) &#x1f338;…

生信分析pandas数据处理 Python简明教程 | 视频17

开源生信 Python教程 生信专用简明 Python 文字和视频教程 源码在&#xff1a;https://github.com/Tong-Chen/Bioinfo_course_python 目录 背景介绍 编程开篇为什么学习Python如何安装Python如何运行Python命令和脚本使用什么编辑器写Python脚本Python程序事例Python基本语法 数…

ant design pro 中ModalForm的参数open无法控制的问题

根据antd自己的说明&#xff0c;visible这个参数在下个版本会被替换成open&#xff0c;所以今天我试着用open。 但是用了open之后发现这个model弹不出来&#xff0c;用visible是正常的。 那么问题在哪呢&#xff1f;又是在import的位置不对 open可以使用的是&#xff1a; imp…

在2023年及以后可以改善企业业务的五种软件

在当今互通互联的世界&#xff0c;依赖人工流程和传统方法的日子早已过去。目前&#xff0c;各种各样的软件解决方案有助于推动企业走向成功。这些解决方案是重塑客户关系、优化项目工作流程、革新财务管理实践以及通过沉浸式的培训体验增强员工能力的关键。 采用软件解决方案…

政府部门联合开展智能制造试点示范行动,对企业发展有哪些利好?

智能制造&#xff08;也称为工业 4.0 或工业物联网 (IIoT)&#xff09;的试点示范可以为业务发展带来诸多好处。主要优势体现在&#xff1a; 1.提高效率&#xff1a;智能制造集成了自动化、数据分析、人工智能和机器学习等先进技术。这些技术优化了生产流程&#xff0c;从而提…

Ubuntu 20.04 APT 方式安装 mysql 5.7

Ubuntu 20.04 直接 apt 安装的 mysql 是 8.0 &#xff0c;现在需要安装 5.7 版本&#xff0c;还颇费周章&#xff01;按照文档直接点进去那个 MySQL APT Repository 中&#xff08;https://dev.mysql.com/downloads/repo/apt/&#xff09;只显示了 8.0 &#xff0c;没有其他版本…

ClickHouse(十六):Clickhouse MergeTree系列表引擎 - CollapsingMergeTree

进入正文前&#xff0c;感谢宝子们订阅专题、点赞、评论、收藏&#xff01;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; &#x1f3e1;个人主页&#xff1a;含各种IT体系技术&#xff0c;IT贫道_Apache Doris,大数据OLAP体系技术栈,Kerberos安全认证-CSDN博客 &…

风丘科技将亮相 EVM ASIA 2023

风丘科技将首次亮相 EVM ASIA 2023 WINDHILL will debut EVM ASIA 2023 ——可持续移动的未来 —The Future of SUSTAINABLE Mobility EVM ASIA 2023是亚太地区电气化的国际性展会&#xff0c;专注于新能源汽车、充电技术及汽车零件制造等。展会致力于促进包括充电站、交通…