gpt4 book ai didi

java - spring启动bean的顺序是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 13:25:25 25 4
gpt4 key购买 nike

我在 XML 文件中定义了两个 bean(A 类和 B 类)。当我启动它们时,DefaultListableBeanFactory 首先创建类 A 的实例,然后创建类 B 的实例。然后我将这些类复制到一个单独的包中并进行一些小的修改。当我从新包启动类时,DefaultListableBeanFactory 首先创建类 B 的实例,然后创建类 A 的实例。为什么 Spring 更改初始化顺序?它似乎不是随机的(即在旧包中总是先启动 A 类,在新包中总是先启动 B 类)。我可以(并且可能应该)在 B 类的定义中添加一个“depends-on”标签,以确保一致的启动顺序,但我想知道为什么它在旧包中工作。

最佳答案

Spring将使用ClassPathBeanDefinitionScanner来查找所有bean并将它们注册到BeanDefinitionRegistry中。在内部它将使用 PathMatchingResourcePatternResolver。这些bean将按照它们被发现的顺序添加,稍后,spring将迭代它们并按此顺序加载它们,解决所需的依赖关系(请参阅DefaultListableBeanFactory.preInstantiateSingletons)。

Spring 机制背后的想法是向您隐藏所有这些内容,并保证一旦您的定义正确(Spring 可以实例化您的 bean,Spring 可以解析其依赖项...),您的应用程序上下文中就会有一个构造良好的对象图

来自DefaultListableBeanFactory:

/** List of bean definition names, in registration order */
private final List<String> beanDefinitionNames = new ArrayList<String>(64);

关于java - spring启动bean的顺序是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32720700/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com