繁体   English   中英

Spring 基于其他bean列表的bean创建

[英]Spring Bean creation based on a list of other beans

任何人都可以解释 Spring 在创建依赖于其他 bean 列表的 bean 时如何定义 bean 创建机制? 最好展示 Spring 规范中关于它是如何定义的部分。

代码如:

public interface Test {
}

@Service
public class TestImpl1 implements Test{
}

@Service
public class TestImpl2 implements Test{
}

public class TestContainer {
    List<Test> testList;
    TestContainer() {
        testList = new ArrayList<>();
    }

    public void addTest(Test test) {
        testList.add(test);
    }
}

然后

@Bean
public TestContainer testContainer(List<Test> testList) {
    TestContainer testContainer = new TestContainer();
    for (Test test : testList) {
        testContainer.addTest(test);
    }
    return testContainer;
}

问题真的是:在为 TestContainer 创建 bean 时,Spring 如何确定 List testList 中应该包含什么?

这看起来像您正在寻找的内容:

https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#beans-factory-class

您还没有具体说明您想知道关于 bean 创建的具体内容,但这是您应该知道的最低要求。 默认情况下,所有 bean 都是 singleton 范围的(在容器生命周期中只创建一次,并且对于所有后续请求,返回相同的实例)。 所有 singleton 范围的 bean 都是急切创建的。 如果 singleton bean 依赖于其他一些 bean(需要它们进行实例化),那么那些其他 bean 将用它/在它之前实例化,不管它们是否是单例,标记为懒惰与否。

这是我认为在他们的网站上的 spring 文档的一部分。 寻找它。 整个 spring 文档都值得一读,即使是长篇阅读( https://docs.spring.io/spring/docs#spring-core/spring-framework

但大多数情况下,spring 将首先读取所有 XML、注释和其他配置数据源,并获取要初始化的 bean 列表。 然后它会得到一个构建树的bean之间的依赖列表。 由于需要首先初始化依赖项,因此初始化的顺序很明显。

最重要的是,您可以为 bean 设置自己的优先级,以便您可以首先或最后初始化一些 bean。

对于您的特定情况,spring 将检查代码源,并使用 Java 反射 API 来确定您需要接口测试实现的集合。 因此 spring 将查找所有匹配的已定义 bean,并返回不比这更复杂的它们。

它主要使用图形数据结构的概念,其中 bean 成为图形的节点,并使用拓扑排序来解决它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM