- 课程名称:Spring Boot3.0最新版入门与商品特征打标实战
- 课程链接:Spring Boot3.0最新版入门与商品特征打标实战
- 章节名称:
- 第2章:基础入门
- 2-6:SpringBoot如何实现自动装配(上)
- 2-7:SpringBoot如何实现自动装配(下)
- 讲师姓名:
Er十七
- 第2章:基础入门
- 时间:2023-02-25 23:30
课程内容
- 自动装配:
- 是Spring Boot的一大特性,这个特性可以帮助其快速集成其它中间件以及框架,自动装配是其原理所在
- 概念:Spring Boot自动将依赖包中的Bean装配到IOC容器中
- 疑问:为什么引入starter-web就可以把一个普通Java应用变成一个Web应用
- 首先在pom.xml中引用starter-web依赖
- 以starter开头为Spring Boot的命名规范
- 点击这个依赖,可以打开spring-boot-starter-web.pom文件,这个文件中有大量的与web服务有关的依赖
- 新疑问,这个依赖是如何装载到Spring容器中的呢?KaTeX parse error: Expected 'EOF', got '这' at position 12: \color{red}这̲就是自动装配所起到的作用
- 首先引用的包命名是有规范的:starter-web,是以starter开头
- 打开这个
org.springframework-boot:spring-boot-starter-web3.0.3
这个包,- 这个中有如下这个结构:META-INF文件夹
- 正常情况下,starter规范要求在上面提到的文件夹下要加入spring.factories文件,这个文件要写入自动装配类
- 但这个文件夹下没有这个factories文件,这些都已经由Spring帮忙实现啦,而是把这个文件放入到别处,因为这些包都是相互依赖的,要引入都是一起引入,至于这个文件在哪里呢?
- 是在autoconfigure这个jar包中的META-INF下面,文件中内容都是要引入类的全路径,是通过SPI方式从接口定义来取得其实现类
- 其下有一个spring的文件夹,里面有
org.springframework.boot.autoconfigure.AutoConfiguration.imports
,内容为Spring支持的内部配置类 - 这些类都有一个特点,就是以AutoConfiguration来结尾
- 举例:查找DispatcherServlet类的定义所在
- 可以找到一个DispatcherServletAutoConfiguration
- 打开这个类源码,可以看到有这样一个注解:
@ConditionalOnClass(DispatcherServlet.class)
- 这个注解的意思就是当运行环境中有
DispatcherServlet
这个类,才会执行这个配置类 - 而这个类是在
webmvc
jar包中引入的 - 也就是说当需要web应用引用
starter-web
包后,就会引入webmvc
包,从而引入DispatcherServlet
这个类
- 举例:如何把配置的地址加载到对应服务上
DispatcherServletRegistrationBean
类来配置- 这个类实现了
ServletRegistrationBean
类- 其中有一个重要属性:
private T servlet
- 其中有一个重要属性:
- 继续实现另一个父类:
DynamicRegistrationBean
- 继续父类:
RegistrationBean
- 其父类:
ServletContextInitializer
- 这个类Spring提供的注入Servlet的规范
- 要有子类实现其onStartup方法
- 在这个方法实现把servlet注入到上下文逻辑
- 其下有一个spring的文件夹,里面有
- 首先在pom.xml中引用starter-web依赖
学习心得
自动装配源码中类的跳转看晕了