從1.2.0這個版本開始引入,在以前的版本,通常的應用都會用到以下兩個個類來啓動SpringBoot應用:java
@EnableAutoConfiguration
: 啓動自動配置,此註釋自動載入應用程序所需的全部Bean。包括從classpath的spring.factories文件加載configuration,並初始化bean的操做@ComponentScan
:從配置路徑中,掃描其餘相關的spring bean觀察源碼(Spring boot - 2.1.x):spring
@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 { @AliasFor(annotation = EnableAutoConfiguration.class) Class<?>[] exclude() default {}; @AliasFor(annotation = EnableAutoConfiguration.class) String[] excludeName() default {}; @AliasFor(annotation = ComponentScan.class, attribute = "basePackages") String[] scanBasePackages() default {}; @AliasFor(annotation = ComponentScan.class, attribute = "basePackageClasses") Class<?>[] scanBasePackageClasses() default {}; }
@EnableAutoConfiguration
@ComponentScan
@SpringBootConfiguration
:這個註解標明瞭用哪一個註解做爲SpringBoot應用啓動的註解,一個Spring應用只能存在一個@SpringBootConfiguration
修飾的註解@Configuration
這個是隱藏包含,對於@SpringBootApplication
修飾的類,也能夠用@Bean
指定加載初始化beanexclude
: 是個list,排除這些類,不加載,通常是Configuration
修飾的類excludeNames
: 做用同上,可是經過名字匹配。scanBasePackageClasses
: @ComponentScan
掃描的類的listscanBasePackages
:@ComponentScan
掃描的包的list不使用@SpringBootApplication
spa
@EnableAutoConfiguration(exclude={Book.class}) @ComponentScan({"net.javabeat"}) @Configuation public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Bean public Test getTest() { return new Test(); } }
使用@SpringBootApplication
code
@SpringBootApplication(exclude=Book.class,scanBasePackages={"net.javabeat"}) public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Bean public Test getTest() { return new Test(); } }