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
总结

05 本节小结

