spring boot的启动注解
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class PmsApplication {
public static void main(String[] args) {
SpringApplication.run(PmsApplication.class);
}
}
exclude = DataSourceAutoConfiguration.class
排除spring boot数据源(单数据源)自动配置,排除后需进行手动配置,或在微服务/分布式项目的配置中心配置。
一般都是使用@EnableAutoConfiguration(exclude = DataSourceAutoConfiguration.class),@EnableAutoConfiguration修饰了@SpringBootApplication
@SpringBootApplication
@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 {
//此处内容省略
}
其中@SpringBootApplication继承的三个重要注解@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan
@SpringBootConfiguration
允许在 Spring 上下文中注册额外的 bean 或导入其他配置类
/**
* Indicates that a class provides Spring Boot application
* {@link Configuration @Configuration}. Can be used as an alternative to the Spring's
* standard {@code @Configuration} annotation so that configuration can be found
* automatically (for example in tests).
* <p>
* Application should only ever include <em>one</em> {@code @SpringBootConfiguration} and
* most idiomatic Spring Boot applications will inherit it from
* {@code @SpringBootApplication}.
*
* @author Phillip Webb
* @since 1.4.0
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {
}
源码注释中有提到,@SpringBootConfiguration是替代spring的@Configuration注解,两者的作用是一样的。
通过@Configuration 与 @Bean结合,将Bean注册到Spring ioc 容器。
案例:
@Configuration
public class UnicomSmsSender {
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder.build();
}
}
@EnableAutoConfiguration
自动化配置,将所有符合条件的@Configuration配置都加载到当前SpringBoot,并创建对应配置类的Bean,并把该Bean实体交给IoC容器进行管理。
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
//此处内容省略
}
@EnableAutoConfiguration继承了@AutoConfigurationPackage和@Import(AutoConfigurationImportSelector.class)
@AutoConfigurationPackage注解的作用是自动装配包,内部继承了@Import(AutoConfigurationPackages.Registrar.class)。
@Import(AutoConfigurationImportSelector.class) 它通过将AutoConfigurationImportSelector类导入到容器中,AutoConfigurationImportSelector类作用是通过selectImports方法执行的过程中,会使用内部工具类SpringFactoriesLoader,查找classpath上所有jar包中的META-INF/spring.factories进行加载,实现将配置类信息交给SpringFactory加载器进行一系列的容器创建过程。
@ComponentScan
默认会扫描启动类同包以及子包下的注解,如果你要改变这种扫描包的方式,用@ComponentScan注解进行指定要扫描的包以及要扫描的类。