SpringBoot如何如何自动配置
SpringBoot应用程序能够实现自动配置主要是依靠一个注解:@SpringBootApplication。
package com.gwolf;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@SpringBootApplication
public class SpringHelloMainApplication {
public static void main(String[] args) throws Exception {
SpringApplication.run(SpringHelloMainApplication.class, args);
}
}
从@SpringBootApplication源码可以看出是一个复合注解。
在@SpringBootConfiguration标注在某一个类上,表示这是一个Spring Boot的配置类。
@EnableAutoConfiguration注解表示开启自动配置功能。以前需要配置的东西,Spring Boot帮我们自动配置。
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
}
在注解EnableAutoConfiguration中导入了一个AutoConfigurationPackages.Registrar.class类。
它的作用是将主配置类的所在包及下面子包里面所有的组件扫描到Spring容器中。
@Import(AutoConfigurationImportSelector.class)会给容器中导入非常多的自动配置类,就是给容器中导入这个场景需要的所有组件,并配置好这些组件。
自动配置图解:
图片来自于王福强老师的博客:https://afoo.me/posts/2015-07-09-how-spring-boot-works.html
参考文档以及优秀博客:
百度经验:https://jingyan.baidu.com/article/1709ad8041d4a64634c4f00e.html
Spring Boot面试杀手锏--自动配置原理:https://blog.csdn.net/u014745069/article/details/83820511
SpringBoot-自动装配原理:https://www.cnblogs.com/hhcode520/p/9450933.html