SpringBoot——原理(起步依赖+自动配置(概述和案例))

这篇具有很好参考价值的文章主要介绍了SpringBoot——原理(起步依赖+自动配置(概述和案例))。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在Spring家族中提供了很多优秀的框架,所有的框架都是基于同一个基础框架——Spring Framework.

使用spring框架开发麻烦的一批,光是搞依赖和配置就够人喝一壶了。因此在spring4.0版本之后又推出了springboot框架。springboot框架用起来比spring框架简单的多了。

SpringBoot——原理(起步依赖+自动配置(概述和案例))

 在springboot的底层提供了两个重要的功能。

起步依赖——简化了pom文件中依赖的配置,解决了依赖配置繁琐的问题。

自动配置——简化了bean的声明以及bean的配置。

起步依赖原理

使用spring开发时用到什么就需要引入什么依赖,比如进行web开发要webmvc的依赖,servlet的依赖,json的依赖,用到aop还要引aop的依赖。

SpringBoot——原理(起步依赖+自动配置(概述和案例))

 在springboot当中要进行web开发只需要引入一个web开发的起步依赖

spring-boot-starter-web,如果有aop的需求就引入spring-boot-starter-aop。

Maven依赖传递

这里利用maven的依赖传递,springboot提供的起步依赖当中就提供了当前程序开发需要的所有常见依赖,如spring-boot-starter-web中就有了web开发的所有常见依赖

SpringBoot——原理(起步依赖+自动配置(概述和案例))

自动配置原理

 研究自动配置就是在研究引入了依赖之后以如何把依赖的jar包里面的bean对象以及配置注入到本项目的IOC容器当中去的。 SpringBoot——原理(起步依赖+自动配置(概述和案例))在下面运行的项目工程中,运行之后可以看见Bean里面有一个appliction,里面放着的就是所有的这个项目中所有bean对象,在没有高亮的bean对象里面可以看见我在项目中自己添加注解的bean对象,有Controller层的,有Mapper层的,还有一个Service层的,其他的高亮的Bean对象应该就是依赖包里面定义好的bean对象,在项目运行时自动加载进来。 

SpringBoot——原理(起步依赖+自动配置(概述和案例))

面试当中问SpringBoot的原理就是在问自动配置的原理

SpringBoot——原理(起步依赖+自动配置(概述和案例))

模拟案例

如上图所示,准备两个项目,其中一个模拟外部的依赖jar包

项目结构图如下所示

SpringBoot——原理(起步依赖+自动配置(概述和案例))

在我们的项目工程中要使用第三方提供的项目依赖就要将其坐标导入进去。上图中画红圈的地方就是上面那个项目坐标。

SpringBoot——原理(起步依赖+自动配置(概述和案例)) 例如在模拟第三方的项目中有一个HeaderConfig类,其自身加了一个Configguration注解表明其实一个配置类,里面有两个Bean对象。

在下面的正式项目的测试类当中进行测试

在test目录下有一些测试方法如下所示,定义了一个IOC容器用来获取第三方的Bean对象。

报错

 直接运行测试后会报错显示没有找到这个类型的Bean对象

SpringBoot——原理(起步依赖+自动配置(概述和案例))

 三个都是会报同一个错误。

说明导入的第三方的Bean和配置类没有生效。

原因:没有被组件扫描扫到。

在项目的启动类的注解@SpringBootApplication注解具有包扫描的作用,但是它的作用范围只到当前包以及它的子包。

当前包就是itheima.

SpringBoot——原理(起步依赖+自动配置(概述和案例))

解决方案(1)(不推荐:):

通过一个注解@ComponentScan组件扫描进行指定包的扫描

SpringBoot——原理(起步依赖+自动配置(概述和案例))

 这里不仅要选择要扫描的第三方包,还要指定当前包,因为一旦显示指定扫描区域,原来默认扫描的区域会被覆盖。

因此加上上面的注解之后再次运行测试就可以成功拿到IOC容器中的Bean对象。SpringBoot——原理(起步依赖+自动配置(概述和案例))

另外的那些Bean对象也可以成功获取。

解决方案(2):

通过上面的解决方案1我们会发现,如果引入其他很多比如mybatis,lombok之类的以来都要这样用componentscan注解扫描的话会多出很多要扫描的包。但是很明显没有这么做

SpringBoot——原理(起步依赖+自动配置(概述和案例))

通过import导入的所有类都会自动加入IOC容器中。

导入普通类

即使这个类本身没有加任何注解也是可以的

SpringBoot——原理(起步依赖+自动配置(概述和案例))

在测试类当中可以成功获取其Bean对象。

SpringBoot——原理(起步依赖+自动配置(概述和案例))

导入配置类

这个会将该配置类下所有Bean对象放入IOC容器当中

SpringBoot——原理(起步依赖+自动配置(概述和案例))

在测试类当中可以成功获取其Bean对象。两个都可以成功获取到

SpringBoot——原理(起步依赖+自动配置(概述和案例))

导入ImportSelector接口的实现类

这个接口下有一个selectImports的方法返回一个String[]数组,里面都是需要交个IOC容器管理的类的全类名。 

SpringBoot——原理(起步依赖+自动配置(概述和案例))

在下面实现这个接口后往里面放一个配置类的全类名,也就是这个配置类会被注入到IOC容器当中 

SpringBoot——原理(起步依赖+自动配置(概述和案例)) 进行导入测试 

SpringBoot——原理(起步依赖+自动配置(概述和案例))

 在测试类当中调试输出可以获得配置类下的两个Bean对象

SpringBoot——原理(起步依赖+自动配置(概述和案例))

但是在使用这种方式导入时还是要清楚的知道这个第三方依赖有哪些个selectImports接口的实现类。只有第三方依赖自己知道自己有哪些类,所以要在第三方依赖当中定义一个注解把自己本身selectImports接口的所有实现类都放进去,然后我们的项目中直接只加个注解即可。

使用@Enablexxxx注解(SringBoot内部采用的方式)

比如下面这个EnableHeaderConfig注解,已经把自己内部selectImports的实现类放进去了。

SpringBoot——原理(起步依赖+自动配置(概述和案例))

所以直接在我们的项目中使用这个注解即可SpringBoot——原理(起步依赖+自动配置(概述和案例))

 调试输出可以获取到第三方中的Bean对象。

SpringBoot——原理(起步依赖+自动配置(概述和案例))文章来源地址https://www.toymoban.com/news/detail-469866.html

到了这里,关于SpringBoot——原理(起步依赖+自动配置(概述和案例))的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java --- springboot3依赖管理和自动配置机制

    目录 一、依赖管理机制 二、自动配置机制  三、自动配置流程 🚕 、为什么导入 starter-web 所有相关依赖都导入进来? ①、开发什么场景,导入什么 场景启动器。 ②、maven依赖传递原则。A-B-C: A就拥有B和C ③、导入 场景启动器。 场景启动器 自动把这个场景的所有核心依赖

    2024年02月07日
    浏览(55)
  • SpringBoot相比于Spring的优点(自动配置和依赖管理)

    我们先看一下我们Spring整合Druid的过程,以及我们使用SpringBoot整合Druid的过程我们就知道我们SpringBoot的好处了。 Spring方式 Spring方式分为两种,第一种就是我们使用xml进行整合,第二种就是使用我们注解进行简化 xml方式 (1)导入坐标  (2)书写jdbc.properties文件和  applicati

    2024年02月08日
    浏览(59)
  • Springboot启动原理和自动配置原理

    关于 springboot 启动流程和配置原理 很久就写了,不过没有详细补充 ,现在补充 —— 2023-08-05 BootstrapRegistryInitializer 是一个函数是接口 org.springframework.boot.BootstrapRegistry 接口 getSpringFactoriesInstances 加载工厂中组件实现方式 org.springframework.core.io.support.SpringFactoriesLoader#loadSpringFacto

    2023年04月25日
    浏览(48)
  • SpringBoot原理-自动配置-原理分析-源码跟踪

    SpringBootApplication 该注解标识在SpringBoot项目的启动类上,是SpringBoot中 最为重要 的注解,该注解由三个部分组成。 @SpringBootConfiguration:该注解与@Configuration注解作用一样,用来声明当前类为一个配置类 @ComponentScan:组件扫描,默认扫描当前启动类所在包及其子包 @EnableAutoConf

    2024年02月09日
    浏览(42)
  • SpringBoot 自动配置原理

    springboot是基于spring的新型的轻量级框架,最厉害的地方当属**自动配置。**那我们就可以根据启动流程和相关原理来看看,如何实现传奇的自动配置 从上面代码可以看出,Annotation定义(@SpringBootApplication)和类定义(SpringApplication.run)最为耀眼,所以要揭开SpringBoot的神秘面纱

    2024年01月20日
    浏览(41)
  • SpringBoot自动配置原理

    springboot是基于spring的新型的轻量级框架,最厉害的地方当属**自动配置。**那我们就可以根据启动流程和相关原理来看看,如何实现传奇的自动配置 从上面代码可以看出,Annotation定义(@SpringBootApplication)和类定义(SpringApplication.run)最为耀眼,所以要揭开SpringBoot的神秘面纱

    2024年01月21日
    浏览(42)
  • SpringBoot自动配置的原理

    以WebMvcAutoConfiguration自动配置的原理为例,SpringBoot内部对大量的第三方库或Spring内部库进行了默认配置,这些配置是否生效,取决于我们是否引入了对应库所需的依赖,如果有那么默认配置就会生效。如果引入springboot-starter-web那么对应的web配置就会自动配置。那么是如何自动

    2024年02月09日
    浏览(33)
  • SpringBoot3自动配置原理

    遵循约定大约配置的原则,在boot程序启动后,起步依赖中的一些bean对象会自动注入到ioc容器 看一下我们前面写的代码有没有达到自动配置的效果呢? 没有自动,我们写了配置类,写了@Import注解,所以并没有达到自动配置的效果。那怎么办呢?接下来我们通过翻看源码的方

    2024年01月22日
    浏览(37)
  • springboot 原理分析之自动配置

             Condition 是在 Spring 4.0 增加的条件判断功能,通过这个可以功能可以实现选择性的创建 Bean 操作。比如说,只有满足某一个条件才能创建这个 Bean ,否则就不创建。         SpringBoot 是如何知道要创建哪个 Bean 的?比如 SpringBoot 是如何知道要创建  RedisTemplate 

    2024年01月19日
    浏览(37)
  • SpringBoot自动配置原理简单分析

    说明:在SpringBoot项目中,我们添加了许许多多的注解,这些注解提高了开发效率。这是因为SpringBoot在项目启动时,帮我们自动装配了大量的Bean对象,可以通过分析源码查看自动装配的大致原理。 进入到启动类中的@SpringBootApplication注解中,该注解里面有七个注解,上面四个

    2024年02月09日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包