【SpringBoot】@SpringBootApplication 自动装配执行原理 -- @SpringBootConfiguration和@EnableAutoConfiguration

 

spring boot内置了tomcat,并且不需要打成war再执行。可以在appication.properties对端口号等服务端信息进行配置。

spring boot将各个应用/三方框架 设置成了一个个“场景”stater,以后要用哪个,只需要引入那个场景即可。
选完之后,spring boot就会将 该场景所需要的所有依赖 自动注入。 
例如 选择 “web”,spring boot就会将web相关的依赖(tomcat  json) 全部引入本项目。

---------------------------------------------------------------------------------------------------------------------------

@SpringBootApplication

spring boot的主配置类,该注解包含:@SpringBootConfiguration和 @EnableAutoConfiguration

【SpringBoot】@SpringBootApplication 自动装配执行原理 -- @SpringBootConfiguration和@EnableAutoConfiguration_第1张图片

---------------------------------------------------------------------------------------------------------------------------

    @SpringBootConfiguration

    @SpringBootConfiguration: 包含@Configuration,表示“配置类”: 

  1. 该类是一个配置类 (配置类类似spring的XML配置文件,主要用来配置bean的类,与功能类(实体类,如pojo等)不同)
  2. 加了@Configuration注解的类,会自动纳入Spring 容器  (@Component,Java注解的方式配置bean。                        Spring 3.x 装配 Java bean的三种方式)

【SpringBoot】@SpringBootApplication 自动装配执行原理 -- @SpringBootConfiguration和@EnableAutoConfiguration_第2张图片

---------------------------------------------------------------------------------------------------------------------------

 @EnableAutoConfiguration

    @EnableAutoConfiguration:使spring boot可以自动配置 :可以找到@SpringBootApplication所在类的包 ,作用:就会将该包及所有的子包 全部纳入spring容器
    spring boot在启动时,会根据META-INF/spring.factories找到相应的三方依赖,并将这些依赖引入本项目

【SpringBoot】@SpringBootApplication 自动装配执行原理 -- @SpringBootConfiguration和@EnableAutoConfiguration_第3张图片

---------------------------------------------------------------------------------------------------------------------------

@AutoConfigurationPackage  --自动扫描main包以及子包

【SpringBoot】@SpringBootApplication 自动装配执行原理 -- @SpringBootConfiguration和@EnableAutoConfiguration_第4张图片

Registrar :主类(main类)

【SpringBoot】@SpringBootApplication 自动装配执行原理 -- @SpringBootConfiguration和@EnableAutoConfiguration_第5张图片

---------------------------------------------------------------------------------------------------------------------------

@Import({AutoConfigurationImportSelector.class}) --引入三方依赖(jar、配置)

--selectImports() --getConfigurations()--

第三方jar 的引入不是通过扫描目标包及其子包的方式发现,而是通过spring.factories文件(官方提供)加入

---------------------------------------------------------------------------------------------------------------------------

总结:

编写项目时,一般会 对自己写的代码  以及 三方依赖 进行配置。但是spring boot可以自动进行配置:

 a:自己写的代码,spring boot通过@SpringBootConfiguration自动帮我们配置;
 b. 三方依赖 通过spring-boot-autoconfigure-2.0.3.RELEASE.jar中的META-INF/spring.factories进行声明, 然后通过@EnableAutoConfiguration开启使用即可 spring-boot-autoconfigure-2.0.3.RELEASE.jar包中 包含了 J2EE整合体系中 需要的依赖。

c.如何自动装配:研究org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration,\

通过观察该源码 发现:@Configuration:标识此类是一个配置类  、将此类纳入springioc容器 。@EnableConfigurationProperties(HttpEncodingProperties.class): 通过HttpEncodingProperties将编码设置为了UTF_8 (即自动装配为UTF_8, 如何修改改编码:通过改HttpEncodingProperties的 predfix+属性名 进行修改 [配置文件中,yml/properties]) 即:该注解给了默认编码utf8,并且提供了prefix+属性名 的方式 供我们修改编码。

@ConditionalOnProperty(prefix = "spring.http.encoding", value = "enabled", matchIfMissing = true) :当属性满足要求时,此条件成立  :要求 如果没有配置spring.http.encoding.enabled=xxx, 则成立。
 

1、每一个XxAutoConfiguration 都有很多条件@ConditionalOnXxx,当这些条件都满足时,则此配置自动装配生效(utf-8)。但是我们可以手工修改改 自动装配: XxxProperties文件中的  prefix.属性名=value 。

2、全局配置文件中的key, 来源于某个Properties文件中的 prefix+属性名。--boot通过XxAutoConfiguration实现自动装配 ,修改默认值 XxxProperties( prefix+属性名)

---------------------------------------------------------------------------------------------------------------------------

如何知道 spring boot开启了哪些自动装配、禁止了哪些自动装配: application.properties中 debug=true?

       Positive matches列表 表示 spring boot自动开启的装配 。
        Negative matches列表 表示spring boot在此时 并没有启用的自动装配。

 

  

你可能感兴趣的:(后台Java,spring,日常学习,springboot)