iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >SpringBoot自动配置如何实现
  • 199
分享到

SpringBoot自动配置如何实现

2023-06-30 16:06:58 199人浏览 泡泡鱼
摘要

这篇文章主要介绍“SpringBoot自动配置如何实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“springBoot自动配置如何实现”文章能帮助大家解决问题。springboot如何实现在之前的

这篇文章主要介绍“SpringBoot自动配置如何实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“springBoot自动配置如何实现”文章能帮助大家解决问题。

    springboot如何实现

    在之前的 helloworld 示例中,已经初步体会到 springboot 自动导入依赖、完成配置的爽快了。

    那么,springboot 是如何实现的呢?

    一、依赖管理特性

    先看下上一篇内容示例中的pom.xml:

    <!--导入父工程-->  <parent>      <groupId>org.springframework.boot</groupId>      <artifactId>spring-boot-starter-parent</artifactId>      <version>2.3.4.RELEASE</version>  </parent>  <dependencies>      <dependency>          <groupId>org.springframework.boot</groupId>          <artifactId>spring-boot-starter-WEB</artifactId>      </dependency>  </dependencies>

    这里添加了一个父项目,另外只导入了一个依赖spring-boot-starter-web,最后我们所有相关的包就进来了。

    SpringBoot自动配置如何实现

    整个过程中,无需关心导包问题。

    1. 父项目

    每一个 springboot 工程都有一个父项目,一般都是用来做依赖管理的。

    父项目中可能会申明很多的依赖,那么子项目只要继承了父项目,后续在添加依赖的时候就不需要添加版本号了。

    以上述为例,父项目使用的是2.3.4.RELEASE的 springboot 版本,所以下面添加的依赖,就无需再写版本号。

    (1)父项目如何管理版本

    可以按住ctrl,然后单击这个父项目进入一探究竟。

    SpringBoot自动配置如何实现

    进来后发现他也有一个父项目spring-boot-dependencies。

    <parent>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-dependencies</artifactId>    <version>2.3.4.RELEASE</version>  </parent>

    继续进入到spring-boot-dependencies,在下面可以看到一个properties标签:

    SpringBoot自动配置如何实现

    这里几乎声明了全部我们在开发中可能会用到的 jar 包的版本。

    继续往下可以看到具体的依赖管理dependencyManagement,这里引用的就是properties里申明的版本。

    SpringBoot自动配置如何实现

    举个例子:

    左侧我看到有个包是logback,那么就在里面搜索下,发现这里定义好的版本就是1.2.3。

    SpringBoot自动配置如何实现

    所以说,父项目的主要功能就是依赖管理,几乎声明了开发中常用的依赖的版本号。

    (2)使用指定的版本

    如果不要使用自动仲裁出的版本,而使用指定版本也是可以的。

    比如 mysql 版本,自动仲裁的结果是8.0.21,但是我只想用5.1.43的版本。

    SpringBoot自动配置如何实现

    添加一个properties标签,在里面申明版本即可。

    <properties>      <Mysql.version>5.1.43</mysql.version>  </properties>

    再看下导入的依赖,就已经变成指定的版本了。

    SpringBoot自动配置如何实现

    2. 场景启动器

    再来看下最开始导入的一个依赖spring-boot-starter-web:

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

    后续会见到更多的以spring-boot-starter命名的启动器。在官方文档里也有详细的说明

    SpringBoot自动配置如何实现

    什么是 starter?

    starter 一组需要依赖的集合描述,也就是通常我们只需要引入一个 starter,那么对应的整个开发场景就会引入了。

    比如想开始使用 Spring 和 JPA 进行数据库访问,那么就在项目中引入spring-boot-starter-data-jpa依赖项。

    另外,注意这里spring-boot-starter-*开头的是官方的启动器命名方式。

    这么说还有非官方的?是的,如果你觉得官方给你的 starter 场景还是不能满足你的使用需要,那么你可以自定义 starter。

    但是官方推荐自定义的命名方式使用thirdpartyproject-spring-boot-starter。

    至于为什么只导入一个 starter 就可以导入整个场景的依赖,其实还是跟上面父项目一样,Maven 的依赖特性。

    进入到spring-boot-starter-web,往下翻,就可以看到开发 web 场景所用到的依赖了。

    SpringBoot自动配置如何实现

    所以,以后需要开发哪个场景,只要参考官方文档导入对应的启动器即可。

    二、自动配置

    这里再回顾一下之前的 helloworld 项目中,springboot 自动配置好了哪些东西:

    • 自动配好 Tomcat

    • 自动配好 springMVC

    • 自动配好 web 常见功能,比如:字符编码问题

    • 默认的包结构:主程序所在包以及下面所有子包里的组件都会被默认扫描

    • 各种配置拥有默认值

    • 按需加载所有自动配置项

    • ......

    1. 自动配置组件

    不管自动配置好什么,步骤都是:先引入、再配置。

    比如 tomcat,那么前提是先引入了 tomcat 依赖,这就由上面第一部分内容所讲的依赖管理完成,在引入了 web starter 后,自动引入场景。

    自动引入了场景,也就引入了这个场景下所用到的各种 jar 包,接下来就是要配置这些内容,比如 tomcat、springmvc 等等。

    拿 springMVC 举例,在之前要使用 springMVC,肯定要配置DispatcherServlet,帮我们拦截所有请求。

    <servlet>        <servlet-name>springMVC</servlet-name>        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>        <init-param>            <param-name>contextConfigLocation</param-name>            <param-value>classpath:springMVC.xml</param-value>        </init-param>        <load-on-startup>1</load-on-startup>    </servlet>

    现在看下之前的 helloworld 应用中,springboot 是在哪里帮我们做好配置的。

    先看主程序类:

    // 标记这是一个 springboot应用,这个类是主程序类,所有启动的入口@SpringBootApplicationpublic class MainApplication {    public static void main(String[] args) {        SpringApplication.run(MainApplication.class, args);    }}

    可以创建个本地变量(alt+enter),可以看到这个是个ConfigurableApplicationContext类型。

    SpringBoot自动配置如何实现

    @SpringBootApplicationpublic class MainApplication {    public static void main(String[] args) {        ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);    }}

    可以使用getBeanDefinitionNames()方法,查看里面包含了哪些容器,遍历打印出来。

    @SpringBootApplicationpublic class MainApplication {    public static void main(String[] args) {        // 返回ioc容器        final ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);        // 查看容器里的组件        final String[] beanDefinitionNames = run.getBeanDefinitionNames();        for (String name: beanDefinitionNames) {            System.out.println(name);        }    }}

    接下来启动应用,看下控制台输出。

    SpringBoot自动配置如何实现

    在控制台输出里ctrl+F搜索下DispatcherServlet:

    SpringBoot自动配置如何实现

    发现 IOC 容器中已经有了对应的组件。

    2. 默认的包结构

    主程序所在包以及下面所有子包里的组件都会被默认扫描,所以我们不需要配置开启组件扫描,也可以正常使用。

    但是要注意这里的范围:

    SpringBoot自动配置如何实现

    示例中就是com.pingguo.boot包下以及所有子包都可以自动扫描。

    如果你就是要放到外面,还希望被扫描到,怎么办?

    那么可以使用主程序类中@SpringBootApplication注解中的一个属性scanBasePackages,扩大包的范围即可:

    @SpringBootApplication(scanBasePackages = "com.pingguo")public class MainApplication {    public static void main(String[] args) {... ...
    3. 各种配置拥有默认值

    比如 tomcat端口,在application.properties配置文件里使用 idea 输入的时候,就可以看到带有默认值8080:

    SpringBoot自动配置如何实现

    点击进去可看到后面都是绑定了对应的 java 类。

    SpringBoot自动配置如何实现

    配置文件的值最终会绑定在对应的类上,这个类会在容器中创建对象。

    4. 按需加载所有自动配置项

    比如应用中只引入了spring-boot-starter-web,那么就只有web场景的自动配置才会开启。

    springboot 中的所有自动配置,都在这里:

    <dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-autoconfigure</artifactId>    <version>2.3.4.RELEASE</version>    <scope>compile</scope>  </dependency>

    点击spring-boot-starter-web可以找到spring-boot-starter,再进入其中就可以看到spring-boot-autoconfigure。

    关于“SpringBoot自动配置如何实现”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

    --结束END--

    本文标题: SpringBoot自动配置如何实现

    本文链接: https://www.lsjlt.com/news/330345.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • SpringBoot自动配置如何实现
      这篇文章主要介绍“SpringBoot自动配置如何实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringBoot自动配置如何实现”文章能帮助大家解决问题。springboot如何实现在之前的...
      99+
      2023-06-30
    • SpringBoot如何实现Tomcat自动配置
      目录准备工作 启动 接着往下看 目录 准备工作 我们知道SpringBoot的自动装配的秘密在 org.springframework.boot.autoconfigure 包下的...
      99+
      2022-11-11
    • springboot自动刷新配置怎么实现
      在Spring Boot中,可以通过使用Spring Cloud Config或Spring Boot Actuator来实现自动刷...
      99+
      2023-10-10
      springboot
    • SpringBoot自动配置Quartz的实现步骤
      目录1. 依赖信息 1.1 原依赖信息 1.2 新的依赖 1.3 依赖变化 2. 新的依赖使用 2.1 默认配置可用 2.2 使用自动配置 2.3 配置信息: 3. 总结 Sprin...
      99+
      2022-11-12
    • 使用springboot怎么实现自动配置
      这篇文章将为大家详细讲解有关使用springboot怎么实现自动配置,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。springboot是什么springboot一种全新的编程规范,其设计目的...
      99+
      2023-06-14
    • Springboot 如何关闭自动配置
      目录Springboot 关闭自动配置1. 关闭Redis自动配置2. SpringBoot默认会自动配置数据库开启关闭自动任务配置流程1.需求2.解决方案Springboot 关闭...
      99+
      2022-11-12
    • SpringBoot是如何实现自动配置的你知道吗
      目录SpringBoot启动类:步骤如下: 总结SpringBoot启动类: @SpringBootApplication public class CommunityAppli...
      99+
      2022-11-12
    • SpringBoot自动配置实现的详细步骤
      目录springboot如何实现一、依赖管理特性1. 父项目2. 场景启动器二、自动配置1. 自动配置组件2. 默认的包结构3. 各种配置拥有默认值4. 按需加载所有自动配置项三、小...
      99+
      2022-11-13
    • SpringBoot开发实战之自动配置
      在介绍SpringBoot的自动配置之前,先了解下注解@Import的使用,SpringBoot的@Enable*开头的注解底层依赖于@Import注解导入一些类,使用@Import...
      99+
      2022-11-12
    • Springboot自动配置与@Configuration配置类实例分析
      这篇文章主要介绍“Springboot自动配置与@Configuration配置类实例分析”,在日常操作中,相信很多人在Springboot自动配置与@Configuration配置类实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好...
      99+
      2023-07-02
    • SpringBoot自定义Starter与自动配置实现方法详解
      目录前言本次练习的代码仓库代码简要说明custom-springboot-starter-demo 的pom文件customer-starter 的pom文件test 的pom文件配...
      99+
      2023-02-07
      SpringBoot自定义Starter SpringBoot自动配置
    • SpringBoot使用自动配置xxxAutoConfiguration
      常用的类: @ConditionalOnProperty(name = "use.redis.session.store", havingValue = "tru...
      99+
      2022-11-12
    • SpringBoot中@ConfigurationProperties实现配置自动绑定的方法
      目录代码构造器绑定结合@PropertySource代码 pom.xml: <xml version="1.0" encoding="UTF-8"> <projec...
      99+
      2022-11-13
    • 全面解析SpringBoot自动配置的实现原理
      之前一直在用SpringBoot框架,一直感觉SpringBoot框架自动配置的功能很强大,但是并没有明白它是怎么实现自动配置的,现在有空研究了一下,大概明白了SpringBoot框架是怎么实现自动配置的功能,我们编写一个最简单的自动配置功...
      99+
      2023-05-31
      spring boot 配置
    • SpringBoot自动配置Quartz的实现步骤是什么
      本篇内容介绍了“SpringBoot自动配置Quartz的实现步骤是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 依赖信息spri...
      99+
      2023-06-25
    • Springboot自动配置与@Configuration配置类详解
      目录@Configuration注意点1注意点2注意点3注意点4springboot自动配置@Configuration 注意点1 配置类(@Configuration下的这个类)其...
      99+
      2022-11-13
    • 浅析SpringBoot自动装配的实现
      目录背景解析起始具体解析结论备注背景 众所周知,如下即可启动一个最简单的Spring应用。查看@SpringBootApplication注解的源码,发现这个注解上有一个重要的注解@...
      99+
      2022-11-13
    • SpringBoot DataSource数据源实现自动配置流程详解
      目录一、重点概念1、什么是DataSource数据源2、数据库连接池二、导入依赖三、分析自动配置1、DataSourceAutoConfiguration类2、DataSourceT...
      99+
      2022-11-13
    • Springboot@Configuration与自动配置详解
      不知道大家第一次搭SpringBoot环境的时候,有没有觉得非常简单。无须各种的配置文件,无须各种繁杂的pom坐标,一个main方法,就能run起来了。与其他框架整合也贼方便,使用E...
      99+
      2022-11-13
    • springboot自动配置原理解析
      目录前言开始总结前言 小伙伴们都知道,现在市面上最流行的web开发框架就是springboot了,在springboot开始流行之前,我们都用的是strust2或者是springm...
      99+
      2022-11-12
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作