spring boot的启动注解(网上收集资料及自己理解)

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注解进行指定要扫描的包以及要扫描的类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值