基础篇-10_自动配置原理_哔哩哔哩_bilibilispringBoot看黑马
视频包括以下内容
- SpringBoot的优点
- 自动你装配原理,注入第三bean
- 自定义starter
- BeanFactory,BeanPostProcessor等组件
- SpringBoot启动流程
- Bean的生命周期
- Bean的循环依赖问题
- SpringMVC的执行流程面试篇-14_面试题_SpringMvc执行流程_哔哩哔哩_bilibili
Spring缺点
虽然Spring的组件代码是轻量级的,但它的配置却是重量级的(需要大量XML配置)。
为此,Spring 2.5引入了基于注解的组件扫描,这消除了大量针对应用程序自身组件的显式XML配置。
Spring 3.0引入了基于Java的配置,这是一种类型安全的可重构配置方式,可以代替XML。
但是对于第三方jar包中需要注入的Bean对象,任然需要手动添加@configuration配置类和@bean注解。
Spring Boot 和 Spring/SSM 的区别
SpringBoot都做了什么来简化开发。(三点)
基础篇-01_springboot概述_哔哩哔哩_bilibili
- 起步依赖springbootstarter-web将各种spring的maven依赖都整合在了一起。
- 内嵌tomcat。轻松的开发和应用web项目。
- 约定由于配置,自动配置
@EnableAutoConfiguration,无需写xml或者手动通过注解进行配置。引入第三方jar包即可。
约定好,第三方jar包里面的配置类全路径都将放在classpath:/META-INF/spring.factories文件里面,这样的话springboot就可以知道第三方jar包里面这个配置类的位置。这个步骤主要是用到了spring里面的SpringFactoriesLoader来完成的。
第三个,springboot拿到所有第三方jar包里面声明的配置类以后,再通过Spring提供的lmportSelector这样一个接口(@Import注解功能) ,来实现对这些配置类的动态加载,从而去完成自动装配的动作。
Springboot中如何将第三方依赖中的类注入Bean?(两种方式)
(两种方式)一个是@bean+@Configuration,一个是@Import
上面这个视频对理解自动装配非常重要
- 从bean注解讲到了import注解。
- 从import注解讲到了ImportSelector接口并实现selectImports方法注入bean对象。
- 讲到了在selectImports方法中读取配置文件中的全类名。
- 最后讲了将 @Import({xxxxxImportSelector.class}) 封装为 @Enablexxxxx 注解。
这其实也是springboot中@EnableAutoConfiguration注解自动装配的原理
- @bean注解
- @Import 注解(@Import注解又有两种方式)
-
- 导入配置类(当configuration配置类不在springboot包扫描范围内时,可以在启动类通过import注解导入configuration配置类,使其生效。)
- 导入ImportSelector接口实现类,重写selectImports 方法,在selectImports方法中书写需要注入的类的配置类全类名。
Spring Boot 的自动配置是如何实现的?(难点)
基础篇-10_自动配置原理_哔哩哔哩_bilibili (简单版本,看这个)
6. 源码剖析-自动配置-@Import(上)_哔哩哔哩_bilibili(复杂版本,没必要看了)
什么是自动装配?
- 使用过 Spring 的小伙伴,一定有被 XML 配置统治的恐惧。即使 Spring 后面引入了基于注解的配置,我们在开启某些 Spring 特性或者引入第三方依赖的时候,还是需要用 XML 或 Java注解 进行显式配置。
- 在写spring的时候,我们需手动注入很多bean,比如数据库连接池等。在springBoot中,我们直接配yml文件就可以了,springboot会读取yml配置文件自动帮我们装配一些第三方组件,不需要我们自己去@Bean装配了。
- 自动配置: 根据我们添加的jar包依赖,会自动将一些配置类的bean注册进ioc容器,我们可以需要的地方使用
@autowired或者@resource等注解来使用它。
springboot如何实现自动装配的?
如何讲述
- 启动类SpringBootApplication注解中组合了 @EnableAutoConfiguration注解
- @EnableAutoConfiguration注解中组合了@Import注解, @Import注解导入了AutoConfigurationImportSelector选择器类。
- ImportSelector选择器类中的selcetImports方法经过层层调用,最终会读取META-INF下的一个文件(xxxx.impors/spring.factories)
- 读取文件中的全类名,根据conditional注册条件把bean注入IOC容器。
如何理解约定由于配置
-
比如springboot的自动配置的原理。spring.factories, 约定好放在那个meta-inf/spring.factories文件下(接口名=类全限定名),这也是引入三方jar包,就回去meta-inf那个文件去找,找到了就根据条件自动注入。
SpringMVC执行流程(难,问得少)
SpringBoot启动流程?(阿里,难)
核心两步,总分总。
面试篇-10_面试题_SpringBoot启动流程_哔哩哔哩_bilibili
如果需要自己写一个jar包并实现自动装配bean,如何写?
根据上面的思路。如何自己写jar包。
- 在jar包中声明需要注入的bean,然后jar包中写一个configuration配置类,通过 @bean 注入自己想注入的自定义类。(这时配置类不生效)
- 写一个Autoconfig配置类,并 @Import 第一步 需要注入bean的配置类。(此时Autoconfig不生效)
- 在自己的META-INFO文件下的xxx.imports 文件中 写入 第二步的 自动配置类的全类名。
- Springboot会读取我们的文件的配置类全类名,将我们的配置类中的Bean导入IOC容器。
Springboot的注册条件 @conditional(了解即可)