我试图跟踪初始化AnnotationConfigApplicationContext的过程,但卡在了这里,调用堆栈如下所示enter image description here
在文件AnnotationConfigUtils.java,
public static void registerAnnotationConfigProcessors(BeanDefinitionRegistry registry) {
registerAnnotationConfigProcessors(registry, null);
}
public static Set<BeanDefinitionHolder> registerAnnotationConfigProcessors(
BeanDefinitionRegistry registry, @Nullable Object source) {
...
return beanDefs;
}
正如您可以清楚地看到的,registerAnnotationConfigProcessors不使用返回值,那么这个返回值有什么用呢?
我试着看一下如果我跳过'public static Set registerAnnotationConfigProcessors'中的所有代码会有什么不同,但仍然不知道。
1条答案
按热度按时间r1zk6ea11#
你使用了非常奇怪的术语。一个返回值永远不会被捕获--异常会被捕获。返回值要么被使用,要么不被使用。
在你的例子中,方法的名字(
registerAnnotationConfigProcessors
)表示它们注册了一些注解配置处理器,这是这些方法的主要目的,也是所谓的“副作用”:它们会更改传入的BeanDefinitionRegistry
,而不必返回任何内容。第二个方法(
registerAnnotationConfigProcessors(BeanDefinitionRegistry registry, @Nullable Object source)
)另外返回一些值。根据JavaDoc:
返回:一组BeanDefinitionHolders,包含此调用实际注册的所有Bean定义
这个方法的调用者可能会将结果用于进一步的处理,但是
registerAnnotationConfigProcessors(BeanDefinitionRegistry registry)
方法对结果没有任何用处,因此简单地忽略了它。