当前位置: 首页 > news >正文

JavaWeb 课堂笔记 —— 26 SpringBoot 原理

学习SpringBoot原理,是为了让我们了解SpringBoot框架开发为什么这么简单,它都帮我们做了哪些事情,进而更加熟练地使用SpringBoot框架进行项目开发,也能汲取到SpringBoot框架中很多优秀的设计思想,面试命中率高达90%。

Spring框架是目前世界上最流行的Java开发框架,所有的Spring框架都是基于Spring FrameWork框架,但是其依赖及其他配置非常繁琐。因此,官方升级了Spring框架,即现在的SpringBoot框架,从而简化项目开发流程。

SpringBoot框架底层提供了非常重要的两个功能,为起步依赖自动配置。起步依赖可以简化pom.xml文件中依赖的引入,自动配置可以简化框架在使用时bean的声明以及bean的配置。

01 起步依赖原理

在这里插入图片描述

注:maven可以进行依赖传递,引入一个依赖,相当于引入一串儿依赖。

02 自动配置原理

什么是自动配置?

自动配置是指在spring容器启动时,一些配置类、bean对象就自动存入到IOC容器当中,不需要我们手动去声明,从而简化了开发的配置工作。

在这里插入图片描述

注:只要在springIOC容器中存在某个bean对象,就可以直接通过注解Autowired注入该对象,从而为我们所用。

在这里插入图片描述

@Component声明自定义bean对象,@Configuration表明一个配置类,其中,@Bean声明第三方bean对象。

但是,直接运行Test测试后,注解并没有生效!因为,SpringBootApplication是有搜索范围的,其只能扫描启动类所在包及其子包,因此,我们要手动指定一下我们要扫描那些包。

方案一:@ComponentScan组件扫描

在这里插入图片描述

在这里插入图片描述

如果我们引入一大堆第三方依赖,那么就需要写很多很多字符串,太麻烦了。所以,目前主流采用第二种解决方案。

方案二:@Import导入

使用@Import导入的类会被Spring加载到IOC容器中,导入形式主要有四种,分别是导入普通类配置类和**ImportSelector接口实现类**\、@EnableXxxxx注解,封装@Import注解,最后一种是主流。

在这里插入图片描述

在这里插入图片描述

03 源码跟踪

在这里插入图片描述

  • @SpringBootConfiguration 该注解与@Configuration注解作用相同,用来声明当前也是一个配置类
  • @ComponentScan 组件扫描,默认扫描当前引导类所在包及其子包
  • @EnableAutoConfiguration:SpringBoot实现自动化配置的核心注解

在这里插入图片描述

注:其实不是所有的bean对象都会装到IOC容器当中,有一个条件装配注解@Conditional控制要不要将bean对象装入。

04 条件装配注解@Conditional

在这里插入图片描述

在这里插入图片描述

@ContidionalOnClass

@Bean
@Conditionalonclass(name = "io.jsonwebtoken.Jwts")
public HeaderParser headerParser(){return new HeaderParser();
}

@ConditionalOnMissingBean

@Bean
@ConditionalOnMissingBean //指定类型(value属性) 或 名称(name属性)
public HeaderParser headerParser(){return new HeaderParser();
}

@ConditionalOnProperty

@Bean
@ConditionalOnProperty(name = "name", havingValue = "itheima")
public HeaderParser headerParser(){return new HeaderParser();
}

application.yml

name: itheima

总结

在这里插入图片描述

05 本节小结

在这里插入图片描述

http://www.dtcms.com/a/419271.html

相关文章:

  • 网上国网app下载安装哈尔滨seo优化排名
  • HTTP首部字段(速查-全47种)
  • 嘉兴高端网站定制100网站建设
  • TypeScript的新类型:unknown
  • MacOS 使用ssh2-python报错ImportError: dlopen ... _libssh2_channel_direct_tcpip_ex
  • 天蓝色美容网站扶贫基金会网站建设是哪家公司
  • 大模型离线部署docker(推荐) + dify部署(docker)
  • 如何基于源码快速搭建数字药店系统?药店买药APP开发实战指南
  • 网站开发文档范例赣榆网站建设xxiaoseo
  • 用生活中的实例解释java的类class和方法public static void main
  • Java SE “概念与优势”面试清单(含超通俗生活案例与深度理解)
  • wordpress发布站点wordpress 链接微博
  • 2025 AI 产业:技术趋势、伦理治理与生态重构
  • 网站开发用到什么技术南昌房产网官方
  • 2025年HTTP代理实测报告:速度、稳定性、价格深度对比
  • Docker 使用技巧:从效率优化到生产级实践(含命令示例)
  • 怎么做网站导航地图网站竞价托管
  • jn建站系统官网网站建设招标网
  • Pycharm 、IDEA卡顿问题解决方案
  • MATLAB涡度通量塔数据分析:从数据预处理、质量控制、缺失插补、组分拆分到可视化、相关性分析、光温敏感性及风浪区Footprint全解析
  • 设计模式(C++)详解——中介者模式(1)
  • 网站顶端图片素材科技创新绘画
  • 【Linux】Linux服务器性能监控实战手册:从命令输出到系统优化的完整指南
  • 数据结构从入门到实战————栈
  • 栈和队列的练习题
  • 文昌网站建设网站优化的要求
  • 网站图标代码做电商平台网站
  • qnx编译ros
  • 运算符重载讲解
  • 第1章 Windows PE开发环境