Spring Boot是由Pivotal團(tuán)隊(duì)提供的全新框架膳沽,其設(shè)計(jì)目的是用來簡化新Spring應(yīng)用的初始搭建以及開發(fā)過程汗菜。它可以按照功能進(jìn)行模塊的引入,非常方便的添加功能挑社,于web而言陨界,通過內(nèi)嵌的web容器(tomcat,jetty等)實(shí)現(xiàn)服務(wù)的發(fā)布,整個(gè)過程輕松優(yōu)雅痛阻。去除xml的配置菌瘪,讓項(xiàng)目的風(fēng)格更加的統(tǒng)一,大家可以更多的關(guān)注于代碼本身阱当。使用起來俏扩,處理方便還是方便,但是不只是方便弊添。我覺得還有一個(gè)關(guān)鍵詞就是定制录淡。
他可以定制化spring的容器,可以在spring容器啟動(dòng)之前油坝,注冊(cè)一些自定義的處理方式(BeanFactoryPostProcessor,BeanPostProcessor),從而擴(kuò)展了Spring的功能嫉戚。比如我們?cè)?a href="http://www.reibang.com/p/9fc6579706bc" target="_blank">SpringBoot入門之SpringApplication.run它經(jīng)歷了什么中曾經(jīng)提到過的spring boot的SPI刨裆,我們以ApplicationContextInitializer為例
在spring.factories文件中聲明了要加載的ApplicationContextInitializer的實(shí)現(xiàn)類
# Application Context Initializers
org.springframework.context.ApplicationContextInitializer=\
org.springframework.boot.context.ConfigurationWarningsApplicationContextInitializer,\
org.springframework.boot.context.ContextIdApplicationContextInitializer,\
org.springframework.boot.context.config.DelegatingApplicationContextInitializer,\
org.springframework.boot.context.web.ServerPortInfoApplicationContextInitializer
當(dāng)調(diào)用getInitializers()方法時(shí)就會(huì)將上面的實(shí)現(xiàn)類加載到內(nèi)存中,然后調(diào)用ApplicationContextInitializer類型的生命周期方法initialize彬檀,進(jìn)行ApplicationContext的定制化操作帆啃。
protected void applyInitializers(ConfigurableApplicationContext context) {
for (ApplicationContextInitializer initializer : getInitializers()) {
Class<?> requiredType = GenericTypeResolver.resolveTypeArgument(
initializer.getClass(), ApplicationContextInitializer.class);
Assert.isInstanceOf(requiredType, context, "Unable to call initializer.");
initializer.initialize(context);
}
}
我們看一個(gè)ConfigurationWarningsApplicationContextInitializer它里面就是注冊(cè)了一個(gè)ConfigurationWarningsPostProcessor的BeanFactoryPostProcessor,以便在refresh時(shí)窍帝,可以打印warn類型的日志努潘。
@Override
public void initialize(ConfigurableApplicationContext context) {
context.addBeanFactoryPostProcessor(
new ConfigurationWarningsPostProcessor(getChecks()));
}
這其實(shí)就是一個(gè)spring功能的擴(kuò)展點(diǎn),既然spring boot 提供了這種方式坤学,那么我們也可以自定義類然后注冊(cè)到spring container中達(dá)到我們的目的
疯坤。個(gè)人覺得,這才是spring boot 帶給我們的最大的驚喜拥峦。