
chapter 1 Spring
Spring IoC
IoC (Inversion Of Control)
DI (Dependency Injection) 软件实体被动接受其依赖的其他组件被IoC容器注入
DL(Dependency Lookup) 当前软件实体主动去某个服务注册地查找其依赖的那些服务
使用Spring框架的JAVA应用通常都有一行”context.getBean()”
1 |
context.getBean() |
阶段一:注册和收集
通过XML或者java或者XML Schema的形式,定义一些bean,然后将其收集并注册进入IoC容器中。$color{red}{就像pom.xml文件一样}$
阶段二:分析和组装
一阶段完成后IoC容器中存在着许多相互独立的bean。通过分析这些bean之间的依赖关系,再组装他们,将一个bean所依赖的bean全部注入这个bean中。
JavaConfig
任何一个标注了@Configuration的java配置类定义都是一个JavaConfig配置类
任何一个标注了@Bean的方法,其返回值作为一个bean定义注册到Spring的IoC容器。
以函数的调用形式来指示bean之间的依赖关系。
1 |
|
chapter 2 SpringBoot的工作机制
1.基本结构
1 |
|
[email protected]
@SpringBootApplication等价于:
- @Target
- @Retention
- @Documented
- @Inherited
- @Configuration
- @EnableAutoConfiguration
- @ComponentScan
@Configuration
定义一个配置类的IoC容器
@EnableAutoConfiguration
借助@Import的支持,收集和注册特定场景相关的bean定义
等价于@Import(EnableAutoConfigurationImportSelector.class)
借助EnableAutoConfigurationImportSelector.class,帮助SpringBoot应用将所有符合条件的@Configuration配置加载到当前的IoC容器之中,再借助工具类SpringFactoriesLoader的支持,@EnableAutoConfiguration“智能”地自动配置功效。
SpringFactoriesLoader根据类名查找对应的一组@Configuration
3.SpringApplication
其执行流程如下:
-
创建一个SpringApplication的对象实例,调用其run方法。
-
根据classpath中的特征类来创建一个对应应用(如web)的ApplicationContext类
-
使用SpringFactoriesLoader在classpath中查找并加载所有可用的ApplicationContextInitializer和ApplicationListener
-
-
初始化完成后,对所有SpringApplicationRunListener调用其started()方法。
-
创建并配置环境
-
对所有SpringApplicationRunListener调用environmentPrepared()。
-
创建某一类的ApplicationContext,并将之前的环境给其使用
-
调用所有的AppicationContextInitializer的initialize(applicationContext)方法来对已经创建好的ApplicationContext进一步处理
-
调用所有的SpringApplicationRunListener的contextPrepared()方法
-
将之前通过@EnableAutoConfiguration获得的所有配置信息和IoC容器加入ApplicationContext中
-
调用所有的SpringApplicationRunListener的contextLoaded()方法
-
调用ApplicationContext的refresh()方法
-
查找ApplicationContext中是否注册有CommandLineRunner,如果有就遍历执行他们
-
完成!调用SpringApplicationRunListener的finished方法
chapter 3 spring-boot-starter




近期评论