标签:ade ble clu 导包 reg boot classes interface 指定
1.POM文件
1.父项目
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent>
<!--上面的父项目为--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.2.1.RELEASE</version> <relativePath>../../spring-boot-dependencies</relativePath> </parent>
<!--这个才是真正管理SrpringBoot应用里面的所有依赖版本-->
| 上即:SpringBoot的版本仲裁中心!
| 即此后导入依赖默认是不需要写版本;(没有在dependencies里面管理的依赖还是要写的,但是在此包括几乎所有要使用的依赖)
2.导入的依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
| spring-boot-starter-web
| spring-boot-starter:spring-boot场景启动器。即帮我们导入了web模块正常运行所依赖的组件。
| starter:即一系列依赖大集合的描述。
SpringBoot将所有的功能场景都抽出来,做成一个个starters(启动器),只需要在项目里面引用这些starters相关场景,随后其所需的所有依赖都会被导进来。并且版本由SpringBoot自动控制(即通过上面的父属性)。要用什么功能就导入什么场景的启动器。
3.主程序类,主入口类
package com.test; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; //告诉springboot这是个springboot应用(@SpringBootApplication) //用于来标注主程序类 @SpringBootApplication public class HelloWorldMain { //args是可变参数 public static void main(String[] args) { /**将spring应用启动起来 * HelloWorldMain.class 为主程序 **/ SpringApplication.run(HelloWorldMain.class,args); } }
|@SpringBootApplication:即SpringBoot应用,标注在某个类上,说明这个类是SpringBoot的主配置类。SpringBoot就应该运行这个类的main方法来启动SpringBoot应用。
|SpringBootApplication:其本身为一个组合注解。
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan( excludeFilters = {@Filter( type = FilterType.CUSTOM, classes = {TypeExcludeFilter.class} ), @Filter( type = FilterType.CUSTOM, classes = {AutoConfigurationExcludeFilter.class} )} ) public @interface SpringBootApplication {
| @SpringBootConfiguration:SpringBoot的配置类;标注在某个类上,表示这是一个SpringBoot的配置类。
|@Configuration:配置类上标注这个注解。
| 上面所说的几个配置类其实就相当于----平时写的配置文件;配置类也是容器中的组件。@Component
|@EnableAutoConfiguration:开启自动配置功能。
@AutoConfigurationPackage @Import({AutoConfigurationImportSelector.class}) public @interface EnableAutoConfiguration {
| @AutoConfigurationPackage:自动配置包。
| @Import({AutoConfigurationPackage.Registrar.class}):即spring底层注解@Import,给容器导入一个组件,导入的组件由AutoConfigurationImportSelector.class,将主配置类(@SpringBootApplication所标注的类)的所在包以及下面所有子包里面的所有组件扫描到Spring容器中去。
| @Import({AutoConfigurationImportSelector.class}):给容器中导入组件。(该插件翻译为开启自动配置类的导包的选择器);AutoConfigurationImportSelector.class:即导入哪些选择器;将所有需要导入的组件以全类名的方式返回。这些组件就会被添加到容器中去。 最终会给容器中导入非常多的自动配置类(即xxxAutoConfiguration)。就是给容器中导入这个场景所需要的所有组件,并且配置好这些组件。在此下图有96个自动配置类。
| 有了这些自动配置类,就省的我们手动编写配置注入等工作了。
|SpringFactoriesLoader.loadFactoryNames(@EnableAutoConfiguration.class,classLoader);
| SpringBoot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值,将这些值作为自动配置类导入到容器中,后,自动配置类生效,后,帮我们进行自动配置工作。
J2EE的整体整合方案和自动配置都在spring-boot-autoconfigure-2.2.1.RELEASE.jar里面。
如有不妥,敬请斧正。
对上一篇SpringBoot中“HelloWorld”的探究
标签:ade ble clu 导包 reg boot classes interface 指定
原文地址:https://www.cnblogs.com/chenjiajiale/p/13371634.html