Closed robertyumao closed 6 years ago
王老师,您好:
有缘读了您写的"SpringBoot揭秘"一书的前几个章节,有些个人不成熟的想法,想跟老师交流。
一: 原书2.3章节部分内容截图
_根据我对源码的理解,感觉spring是这样处理的。
二: 原书3.2章节内容
spring除了判断是否存在ConfigurableWebApplicationContext,还会判断是否存在javax.servlet.Servlet, 两个类必须同时存在,spring才认为当前是web环境,然后把判断结果赋值给SpringApplication的属性 boolean webEnvironment。后续所创建的环境对象类型或web容器类型,都参考webEnvironment的值.
三 : 原书3.3.1章节内容 SpringApplication属性registerShutdownHook默认值是true, 所以默认是会为容器注册ShutdownHook的.
四 : 原书3.3.1章节内容 1.通过@EnableAutoConfiguration导入系统配置类确实是spring boot的核心步骤,不过这个步骤是发生在刷新容器的过程中(即书中描述的第11个步骤)。刷新容器的其中一个步骤是应用容器后处理器,具体是在ConfigurationWarningsPostProcessor(容器后处理器)中处理的。ConfigurationWarningsPostProcessor是在容器的构造函数中被注册到bean工厂的。
2. @EnableAutoConfiguration注解能够导入系统配置类,是因为它被@Import(EnableAutoConfigurationImportSelector.class)注解了。EnableAutoConfigurationImportSelector(导入选择器),它会读取在autoconfig's jar包里的spring.factories文件, 其中key是"EnableAutoConfiguration"的类(都是配置类)。至于是否导入,会读取spring-autoconfigure-metadata.properties文件内容,根据@ConditionalOnClass注解判断配置类依赖的jar包是否存在。
我说的是实现的原理,不是讲具体在哪个类实现,也不是讲怎么设计实现,这个不冲突 ;)
我不记得我说的是大体逻辑还是细节了,但你在根据代码看内容的时候,可能要注意一下我写书时候的代码版本跟你看的代码版本是否一致,因为后面有可能增添; 不过两个条件都判断显然更精确;
默认值可以修改,所以,是要判断
:-)
王老师,您好:
有缘读了您写的"SpringBoot揭秘"一书的前几个章节,有些个人不成熟的想法,想跟老师交流。
一: 原书2.3章节部分内容截图
_根据我对源码的理解,感觉spring是这样处理的。
二: 原书3.2章节内容
spring除了判断是否存在ConfigurableWebApplicationContext,还会判断是否存在javax.servlet.Servlet, 两个类必须同时存在,spring才认为当前是web环境,然后把判断结果赋值给SpringApplication的属性 boolean webEnvironment。后续所创建的环境对象类型或web容器类型,都参考webEnvironment的值.
三 : 原书3.3.1章节内容 SpringApplication属性registerShutdownHook默认值是true, 所以默认是会为容器注册ShutdownHook的.
四 : 原书3.3.1章节内容 1.通过@EnableAutoConfiguration导入系统配置类确实是spring boot的核心步骤,不过这个步骤是发生在刷新容器的过程中(即书中描述的第11个步骤)。刷新容器的其中一个步骤是应用容器后处理器,具体是在ConfigurationWarningsPostProcessor(容器后处理器)中处理的。ConfigurationWarningsPostProcessor是在容器的构造函数中被注册到bean工厂的。
2. @EnableAutoConfiguration注解能够导入系统配置类,是因为它被@Import(EnableAutoConfigurationImportSelector.class)注解了。EnableAutoConfigurationImportSelector(导入选择器),它会读取在autoconfig's jar包里的spring.factories文件, 其中key是"EnableAutoConfiguration"的类(都是配置类)。至于是否导入,会读取spring-autoconfigure-metadata.properties文件内容,根据@ConditionalOnClass注解判断配置类依赖的jar包是否存在。