Spring-Boot学习(一)
最基础的maven+springBoot的pom设置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.study</groupId>
<artifactId>spring-boot-helloworld</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<!--此插件可以将应用打包为可执行的jar包-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.1.7.RELEASE</version>
</plugin>
</plugins>
</build>
</project>
springboot配置解析
@SpringBootConfiguration:SpringBoot的配置类:
标注在某个类上,表示这是一个Spring Boot的配置类:
@Configuration:告诉大家这是一个配置类
配置类:配置文件需要一个容器组件:@Component
@EnableAutoConfiguration:开启自动配置功能:
以前我们需要配置的东西,SpringBoot自动帮我们配置,@EnableAutoConfiguration的作用就是告诉SpringBoot我们要开启自动配置功能了。如此自动配置才能生效。
@AutoConfigurationPackage
@Import({EnableAutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration
@AutoConfigurationPackage自动配置包原理
@Import({Registrar.class})
public @interface AutoConfigurationPackage {
}
metadata获取到注解的源信息
static class Registrar implements ImportBeanDefinitionRegistrar, DeterminableImports {
Registrar() {
}
public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {
AutoConfigurationPackages.register(registry, (new AutoConfigurationPackages.PackageImport(metadata)).getPackageName());
}
public Set<Object> determineImports(AnnotationMetadata metadata) {
return Collections.singleton(new AutoConfigurationPackages.PackageImport(metadata));
}
}
将主配置类(@SpringBootApplication标注的类)的 所在的包以及下面所有的子包里面的所有组件扫描到Spring容器
@Import({EnableAutoConfigurationImportSelector.class})
给容器中导入组件
EnableAutoConfigurationImportSelector导入哪些组件的选择器
导入的组件都是以全类名的方式返回:这些组件就会被添加到容器中:
会给容器中导入非常多的自动配置类(XXXAutoConfiguration):给容器中导入这个场景需要的所需要的所有组件,并配置好这些组件。
可以看到里边有AOP以及Rabbit等各种各样的自动配置类,免去了手动编写配置和注入功能组件的工作。
SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());
这个方法通过反射的方式,让Springboot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration中指定的值,将这些值作为自动配置类导入到容器中,自动配置类就生效了,帮我们进行了自动配置。以前我们spring中需要自己配置的bean都被自动配置了。
J2EE的整体整合解决方案都在spring-boot-autoconfigure-1.5.9.RELEASE.jar这个包中。