1 什么是spring-boot的自动配置
spring-boot的理念是约定优于配置,在编写spring-boot的程序中我们无需使用任何xml配置文件,一切自动配置项spring-boot已经提前帮我们完成了。
重要的注解
@SpringBootApplication
重要的就是这三个注解,下面对每一个注解进行剖析
@ComponentScan
@EnableAutoConfiguration
@Configuration
@Configuration
任何一个标注了@Configuration的Java类定义都是一个JavaConfig配置类
@ComponentScan
@ComponentScan这个注解在Spring中很重要,它对应XML配置中的元素,@ComponentScan的功能其实就是自动扫描并加载符合条件的组件(比如@Component和@Repository等)或者bean定义,最终将这些bean定义加载到IoC容器中。
我们可以通过basePackages等属性来细粒度的定制@ComponentScan自动扫描的范围,如果不指定,则默认Spring框架实现会从声明@ComponentScan所在类的package进行扫描。
注:所以SpringBoot的启动类最好是放在root package下,因为默认不指定basePackages。
@EnableAutoConfiguration
@Import(EnableAutoConfigurationImportSelector.class)
@AutoConfigurationPackage
@AutoConfigurationPackage
比如所我们可能会在实体类上写@Entity注解。这个@Entity注解由@AutoConfigurationPackage扫描并加载,而我们平时开发用的@Controller/@Service/@Component/@Repository这些注解是由ComponentScan来扫描并加载的。
@Import(EnableAutoConfigurationImportSelector.class)
从classpath中搜寻所有的META-INF/spring.factories配置文件,并将其中 org.springframework.boot.autoconfigure.EnableutoConfiguration对应的配置项通过反射(Java Refletion)实例化为对应的标注了@Configuration的JavaConfig形式的IoC容器配置类,然后汇总为一个并加载到IoC容器。