[SpringBoot]源码分析SpringBoot的异常处理机制

<节>

微信号:GitShare
微信公众号:爱折腾的稻草
如有问题或建议,请在公众号留言<一口>[1]

为帮助广大SpringBoot用户达到“知其然,更需知其所以然”的境界,作者将通过SpringBoot系列文章全方位对<强> SpringBoot2.0.0。RELEASE版本深入分解剖析,让您深刻的理解其内部工作原理。

在SpringBoot启动时,会查找并加载所有可用的SpringBootExceptionReporter,其源码如下:


exceptionReporters = getSpringFactoriesInstances(
        SpringBootExceptionReporter.class,
         Class[] { ConfigurableApplicationContext.class }, context);

继续查看getSpringFactoriesInstances方法源码:

   {
    ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
    
    Set names =  LinkedHashSet<>(SpringFactoriesLoader.loadFactoryNames(type, classLoader));
    
    List instances = createSpringFactoriesInstances(type, parameterTypes, classLoader, args, names);
    
    AnnotationAwareOrderComparator.sort(instances);
    
     instances;
}

代码来看不难,也是通过Spring的Factories机制来加载,之前的文章中已经详细讲解过其过程。


   {

    
     ;

}
  • SpringBootExceptionReporter是一个回调接口,用于支持对SpringApplication启动错误的自定义报告。
    里面就一个报告启动失败的方法。

  • 其实现类:org.springframework.boot.diagnostics.FailureAnalyzers,
    用于触发从春天。工厂加载的FailureAnalyzer和FailureAnalysisReporter实例。

<编辑>
 <代码类=癹ava语言java hljs”> FailureAnalyzers (ConfigurableApplicationContext 上下文),{
,,,, (,,),
}

FailureAnalyzers (ConfigurableApplicationContext 上下文,ClassLoader 类加载器),{
,,,, Assert.notNull (,,),
,,,, .classLoader =, (ClassLoader ==,, ?, context.getClassLoader(),:,类加载器),
,,,, .analyzers =, loadFailureAnalyzers (.classLoader);
,,,, prepareFailureAnalyzers (.analyzers,上下文);
}
<李>

<李>

加载并实例化所有的FailureAnalyzer,
通过春天的工厂机制来查找和加载所有的FailureAnalyzer,
加载/元/春天。工厂中的org.springframework.boot.diagnostics。FailureAnalyzer配置如下:

 <代码类=癹ava语言java hljs”> #, Failure 分析
org.springframework.boot.diagnostics.FailureAnalyzer=\
org.springframework.boot.diagnostics.analyzer.BeanCurrentlyInCreationFailureAnalyzer \
org.springframework.boot.diagnostics.analyzer.BeanNotOfRequiredTypeFailureAnalyzer \
org.springframework.boot.diagnostics.analyzer.BindFailureAnalyzer \
org.springframework.boot.diagnostics.analyzer.BindValidationFailureAnalyzer \
org.springframework.boot.diagnostics.analyzer.UnboundConfigurationPropertyFailureAnalyzer \
org.springframework.boot.diagnostics.analyzer.ConnectorStartFailureAnalyzer \
org.springframework.boot.diagnostics.analyzer.NoUniqueBeanDefinitionFailureAnalyzer \
org.springframework.boot.diagnostics.analyzer.PortInUseFailureAnalyzer \
org.springframework.boot.diagnostics.analyzer.ValidationExceptionFailureAnalyzer \
org.springframework.boot.diagnostics.analyzer.InvalidConfigurationPropertyNameFailureAnalyzer \
org.springframework.boot.diagnostics.analyzer。null

[SpringBoot]源码分析SpringBoot的异常处理机制