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 本节小结

在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值