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);	List
configurations = 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

在这里插入图片描述

上一篇:MySQL之存储过程和函数
下一篇:SSM中MyBatis使用XML配置文件版和注解版(eclipse)

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2025年04月29日 06时09分41秒