spring 未使用“注解配置实用程序.寄存器注解配置处理器”的返回值

qacovj5a  于 2023-01-24  发布在  Spring
关注(0)|答案(1)|浏览(137)

我试图跟踪初始化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'中的所有代码会有什么不同,但仍然不知道。

r1zk6ea1

r1zk6ea11#

你使用了非常奇怪的术语。一个返回值永远不会被捕获--异常会被捕获。返回值要么被使用,要么不被使用。
在你的例子中,方法的名字(registerAnnotationConfigProcessors)表示它们注册了一些注解配置处理器,这是这些方法的主要目的,也是所谓的“副作用”:它们会更改传入的BeanDefinitionRegistry,而不必返回任何内容。
第二个方法(registerAnnotationConfigProcessors(BeanDefinitionRegistry registry, @Nullable Object source))另外返回一些值。
根据JavaDoc:
返回:一组BeanDefinitionHolders,包含此调用实际注册的所有Bean定义
这个方法的调用者可能会将结果用于进一步的处理,但是registerAnnotationConfigProcessors(BeanDefinitionRegistry registry)方法对结果没有任何用处,因此简单地忽略了它。

相关问题