@SpringBootApplication中包含三个注解
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
excludeFilters = {@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication
- @SpringBootConfiguration:标明该类使用Spring基于Java的注解,springboot推荐我们使用java代替xml
@Configuration
public @interface SpringBootConfiguration
- @EnableAutoConfiguration:该注解开启自动配置的功能 ,其中包含@import,该注解的功能就是借助EnableAutoConfigurationImportSelector将所有符合条件的@Configuration都加载到IOC容器中ApplicationContext中
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration
- @ComponentScan:启动组件扫描,如@controller,@Service等注解都可以被扫描到
ApplicationRunner
@FunctionalInterface
public interface ApplicationRunner {
void run(ApplicationArguments args) throws Exception;
}
CommandLineRunner
@FunctionalInterface
public interface CommandLineRunner {
void run(String... args) throws Exception;
}
ApplicationRunner和CommandLineRunner的接口的执行点是在容器启动成功后的最后一步回调,我们可以在回调方法run中执行相关逻辑
如果有多个ApplicationRunner或CommandLineRunner实现类,而我们需要按一定顺序执行它们,可以在实现类上加上@Order(value=数值)注解,springboot会按照@order的value值从小到大依次执行。