快速开始
1 2 3 4 5 6 7 8 9 10 11 12
| <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.4.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
|
1 2 3 4 5 6 7
| @SpringBootApplication public class MainApplication { public static void main(String[] args) { SpringApplication.run(MainApplication.class) } }
|
1 2 3 4 5 6 7 8 9
| @Controller public class MyController { @ResponseBody @RequestMapping("/hello") public String helloHandle(){ return "hello world!" } }
|
1 2
| server.port = 8080 #tomcat端口
|
1 2 3 4 5 6 7 8 9
| <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
|
依赖管理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.4.RELEASE</version> </parent>
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.3.4.RELEASE</version> </parent>
<properties> <activemq.version>5.15.13</activemq.version> <antlr2.version>2.7.7</antlr2.version> <appengine-sdk.version>1.9.82</appengine-sdk.version> ... ... ... </properties>
<properties> <xxx.version>自定义版本号</xxx.version> </properties>
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
|
自动注入
主程序同级目录下以及同级目录下的子包会自动被扫描
@SpringBootApplication 等同于
@SpringBootConfiguration、
@EnableAutoConfiguration、
@ComponentScan(“com.kuang”)
各种配置有默认值
- 默认配置都是映射到相应xxxProperties类中
- 配置文件中的值会绑定到某个类上,这个类会在容器中创建对象
按需配置
- 引入各不同starter,例如spring-boot-start-web引入spring-boot-start,而spring-boot-start中引入spring-boot-autoconfigure依赖
注解详解
1 2 3 4 5 6 7 8 9 10 11 12 13
| @Configuration public class MyConfig {
@Bean public User user01(){ return new User("张三",18); } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| @Configuration(proxyBeanMethods = true) 代理模式 默认为true,保证springboot容器中是但实例 如果值为false,则就可以创建多个实例 @Import({xxx.class,xxx.class}) 给容器中添加组件
@ConditionalOnBean() 条件装配
@ImportResource() 可以导入传统的xml文件
@ConfigurationProperties(prefix = ) 和配置文件绑定
@EnableConfigurationProperties(xxx.class) 1、 开启这个类配置绑定功能 2、 把这个类自动注入到容器中
|
只有在容器中的组件,才会有SpringBoot的强大功能
1 2 3 4 5
| @Bean javaBean对象 @Component 组件 @Controller 控制器 @Service 业务逻辑组件 @Repository 数据库
|
自动配置原理
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| @SpringBootConfiguration 继承Configuration,表示@SpringBootApplication也是一个配置类 @ComponentScan 包扫描注解 @EnableAutoConfiguration 继承@AutoConfigurationPackage和@Import(AutoConfigurationImportSelector.class) @AutoConfigurationPackage(自动配置包)继承@Import(AutoConfigurationPackage.Registrar.class) 利用Registrar给容器导入一系列组件,将指定的一个包下的所有组件导入(主启动类) @Import(AutoConfigurationImportSelector.class) 1、AutoConfigurationImportSelector类中selectImports方法中getAutoConfigurationEntry(annotationMetadata)获取所有自动配置的集合 2、getAutoConfigurationEntry调用 getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) 获取所有需要导入容器的配置类 3、利用工厂加载Map<String,List<String>>loadSpringFactories(@Nullable ClassLoader classLoader)得到所有组件 4、从META-INF/spring.factories位置来加载一个文件 默认扫描我们当前系统所有META-INF/spring.factories位置的文件 spring-boot-autoconfig-2.3.4.RELEASE.jar也有META-INF/spring.factories文件
|
总结
- Springboot先加载所有自动配置类 xxxAutoConfiguration
- 每个自动配置类按照条件生效,默认都会绑定配置文件指定的值,xxxProperties里面,xxxProperties有和配置文件进行了绑定
- 生效的配置类会给容器中装配很多组件
- 定制话组件
- 用户直接@Bean替换底层的组件
- 用户去看这个组件是获取的配置文件什么值,取配置文件修改
xxxAutoConfiguration–>组件–>xxxProperties取值–>application.properties
1 2 3 4 5 6 7 8
| <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> </dependencies>
|
自定义类绑定配置提示
1 2
| @ConfigurationProperties(prefix = "person")
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configurationprocessor</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build>
|