SpringBoot 五大特性之SpringApplication


一、@SpringBootApplication的作用

 用于激活 @EnableAutoConfiguration 、@ComponentScan 、@Configuration 
相关代码
@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 {
...
}


二、@EnableAutoConfiguration

所有符合自动配置条件的bean定义加载到IoC容器
1. 相关代码

// import 导入了AutoConfigurationImportSelector.class
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {

}


// 用于加载所有配置
public class AutoConfigurationImportSelector implements DeferredImportSelector, BeanClassLoaderAware,
		ResourceLoaderAware, BeanFactoryAware, EnvironmentAware, Ordered {
		
	protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
		List<String> configurations = SpringFactoriesLoader.loadFactoryNames(getSpringFactoriesLoaderFactoryClass(),
				getBeanClassLoader());
		Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you "
				+ "are using a custom packaging, make sure that file is correct.");
		return configurations;
	}

}
2. 小结

@EnableAutoConfiguration 注解中使用 @Import(AutoConfigurationImportSelector.class) ,AutoConfigurationImportSelector.class 中的 getCandidateConfigurations() 方法调用了 SpringFactoriesLoader.loadFactoryNames() ,SpringFactoriesLoader的作用是加载 META-INF/spring.factories 文件下的所有自动配置。



三、@ComponentScan

1. 相关代码
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Repeatable(ComponentScans.class)
public @interface ComponentScan {

}
2. 小结

ComponentScan做的事情就是告诉Spring从哪里找到bean。
默认查找 @SpringBootApplication 类下的所有子集中需要注入到spring的Bean。
也可以进行配置



四、@SpringBootConfiguration

1. 相关代码
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration  // 派生了Configuration
public @interface SpringBootConfiguration {
}

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Configuration {

}
2. 小结

@Configuration 标注的类,为Spring配置类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值