什么是SpringBoot?
使用Spring框架的应用开发中,在SpringBoot出现之间,主流的开发都是使用SpringMVC进行开发。MVC的应用开发使用到的IOC/AOP都需要通过配置文件applicationContext.xml进行配置。这时一个非常繁琐的事情。
那么SpringBoot出现之后,大大的减少了这些繁琐的工作,使应用开发者能够快速的构建一个应用,而不用去管理这些多而杂的xml配置文件。
SpringBoot通过封装Spring框架达到快速开发的实现。
SpringBoot的设计
-
约定优于配置
- 约定默认以jar包形式打包、目录结构(resources/templates/static...)
- 约定starter的形式
- 约定默认application.properties
@SpringBootApplication注解
@SpringBootApplication
是一个复合注解,包含三个注解
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication{
}
@SpringBootConfiguration
本质使用的是@Configuration
,用于生成JavaConfig
,从Spring3开始支持。
@ComponentScan
默认扫描当前包下包含@Component
的类,托管到IOC容器中。
@EnableAutoConfiguration
包含两个注解
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
其中@AutoConfigurationPackage
包含
@Import(AutoConfigurationPackages.Registrar.class)
我们看下AutoConfigurationPackages.Registrar
和AutoConfigurationImportSelector
AutoConfigurationImportSelector
ImportSelector的方式通过实现Spring提供的ImportSelector
接口,实现它的selectImports
方法返回需要托管到IOC的bean类。通过这种形式,可以在selectImports
方法做一些逻辑处理,实现诸如过滤、判断等额外操作。
而AutoConfigurationImportSelector
中主要是通过SpringBoot的SPI机制,SpringFactoriesLoader
返回所有需要加载的class路径。
AutoConfigurationPackages.Registrar
Registrar方式则是通过实现ImportBeanDefinitionRegistrar
接口的registerBeanDefinitions
方法,实现的bean的注册托管。其实现是新建BeanDefinition
再调用BeanDefinitionRegistry
注册这个bean实现IOC托管。