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
容器当中,不需要我们手动去声明,从而简化了开发的配置工作。
注:只要在spring
的IOC
容器中存在某个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
总结