什么是SpringBoot?
使用Spring框架的應用開發(fā)中,在SpringBoot出現(xiàn)之間,主流的開發(fā)都是使用SpringMVC進行開發(fā)。MVC的應用開發(fā)使用到的IOC/AOP都需要通過配置文件applicationContext.xml進行配置。這時一個非常繁瑣的事情。
那么SpringBoot出現(xiàn)之后,大大的減少了這些繁瑣的工作,使應用開發(fā)者能夠快速的構(gòu)建一個應用,而不用去管理這些多而雜的xml配置文件。
SpringBoot通過封裝Spring框架達到快速開發(fā)的實現(xiàn)。
SpringBoot的設(shè)計
-
約定優(yōu)于配置
- 約定默認以jar包形式打包、目錄結(jié)構(gòu)(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
本質(zhì)使用的是@Configuration,用于生成JavaConfig,從Spring3開始支持。
@ComponentScan
默認掃描當前包下包含@Component的類,托管到IOC容器中。
@EnableAutoConfiguration
包含兩個注解
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
其中@AutoConfigurationPackage包含
@Import(AutoConfigurationPackages.Registrar.class)
我們看下AutoConfigurationPackages.Registrar和AutoConfigurationImportSelector
AutoConfigurationImportSelector
ImportSelector的方式通過實現(xiàn)Spring提供的ImportSelector接口,實現(xiàn)它的selectImports方法返回需要托管到IOC的bean類。通過這種形式,可以在selectImports方法做一些邏輯處理,實現(xiàn)諸如過濾、判斷等額外操作。
而AutoConfigurationImportSelector中主要是通過SpringBoot的SPI機制,SpringFactoriesLoader返回所有需要加載的class路徑。
AutoConfigurationPackages.Registrar
Registrar方式則是通過實現(xiàn)ImportBeanDefinitionRegistrar接口的registerBeanDefinitions方法,實現(xiàn)的bean的注冊托管。其實現(xiàn)是新建BeanDefinition再調(diào)用BeanDefinitionRegistry注冊這個bean實現(xiàn)IOC托管。