
SpringBoot——SpringBoot入门
发布日期:2021-05-07 08:40:57
浏览次数:23
分类:精选文章
本文共 4197 字,大约阅读时间需要 13 分钟。
文章目录
1. 新建工程
- 新建maven工程:jar(quick start)
- 修改pom.xml
org.springframework.boot spring-boot-starter-parent 1.5.9.RELEASE org.springframework.boot spring-boot-starter-web junit junit test springboot-01-helloworld org.apache.maven.plugins maven-compiler-plugin 1.8 1.8 org.springframework.boot spring-boot-maven-plugin
- 主启动类
/* * @SpringBootApplication标注一个主程序类,说明这是一个spring boot应用 * SpringApplication.run(xxx.class, args);必须运行的是被@SpringBootApplication注解标注的类 */@SpringBootApplicationpublic class HelloWorldMainApplication { public static void main(String[] args) { //启动spring应用 SpringApplication.run(HelloWorldMainApplication.class, args); }}
2. 依赖管理
导入spring-boot-starter不需要指定版本
- 在pom.xml指定了spring-boot-starter-parent的版本
org.springframework.boot spring-boot-starter-parent 2.1.10.RELEASE
- ctrl+左键进入,发现spring-boot-starter-parent依赖了spring-boot-dependencies
org.springframework.boot spring-boot-dependencies 2.1.10.RELEASE ../../spring-boot-dependencies
- 继续ctrl+左键进入,发现spring-boot-dependencies帮助我们控制了依赖的版本
5.15.10 2.7.7 1.9.76 2.6.4 1.9.4 3.11.1 ...
3. 自动配置原理
3.1 @SpringBootApplication
标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot就应该运行这个类的main方法来启动SpringBoot应用
@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 { }
3.2 @SpringBootConfiguration
标注在某个类上,表示这是一个Spring Boot的配置类
@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Configurationpublic @interface SpringBootConfiguration { }
@Configuration 表明是配置类,@Component添加为容器组件
@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Componentpublic @interface Configuration { }
3.3 @EnableAutoConfiguration
@AutoConfigurationPackage:自动配置包
@Import:Spring的底层注解,给容器中导入一个组件,导入的组件由 AutoConfigurationPackages.Registrar.class 将主配置类(@SpringBootApplication标注的类)的所在包及下面所有子包里面的所有组件扫描到Spring容器
EnableAutoConfigurationImportSelector.class:导入哪些组件的选择器;将所有需要导入的组件以全类名的方式返回;这些组件就会被添加到容器中;还会给容器中导入非常多的自动配置类(xxxAutoConfiguration),通过配置类将这个场景需要的所有组件配置好
@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@AutoConfigurationPackage@Import(AutoConfigurationImportSelector.class)public @interface EnableAutoConfiguration { }
getAutoConfigurationEntry()方法执行时,会获取配置List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes);
protected AutoConfigurationEntry getAutoConfigurationEntry(AutoConfigurationMetadata autoConfigurationMetadata, AnnotationMetadata annotationMetadata) { if (!isEnabled(annotationMetadata)) { return EMPTY_ENTRY; } AnnotationAttributes attributes = getAttributes(annotationMetadata); Listconfigurations = getCandidateConfigurations(annotationMetadata, attributes); configurations = removeDuplicates(configurations); Set exclusions = getExclusions(annotationMetadata, attributes); checkExcludedClasses(configurations, exclusions); configurations.removeAll(exclusions); configurations = filter(configurations, autoConfigurationMetadata); fireAutoConfigurationImportEvents(configurations, exclusions); return new AutoConfigurationEntry(configurations, exclusions);}
可以看到这些配置全是xxxAutoConfiguration
