我们来看主程序类。
package com.gong; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; //pringBootApplication用于标识这是一个主程序 @SpringBootApplication public class HelloWorldMainApp { public static void main(String[] args) { //Spring应用启动起来 SpringApplication.run(HelloWorldMainApp.class,args); } }
用@SpringBootApplication标识说明这个类是主配置类。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 { ...... }
一、@SpringbootConfiguration
用@SpringBootConfiguration标识springboot配置类:标注在某个类上,表示这是一个配置类;@SpringBootConfiguration注解里面:
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Configuration public @interface SpringBootConfiguration { }
Configuration配置类上标识这个注解,配置类也是容器中的一个组件。
二、EnableAutoConfiguration
开启自动配置功能,以前需要配置的东西,springboot帮我们进行自动配置。
我们看看里面有什么:
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @AutoConfigurationPackage //自动配置包 @Import({EnableAutoConfigurationImportSelector.class}) public @interface EnableAutoConfiguration { String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration"; Class<?>[] exclude() default {}; String[] excludeName() default {}; }
自动配置包又被表示了@Import({Registrar.class}),spring的底层注解@import,给容器导入一个组件。即将主配置类即(SpringBootApplication标注的类)的所在的包以及所有子包里面的所有组件扫描到spring容器。