java - 如果 bean 试图在其构造函数中加载 Spring 应用程序上下文,会发生什么情况?

标签 java spring configuration dependency-injection infinite-loop

给定以下 Spring 应用程序上下文和类 A,当您运行类 A 时会发生什么?

applicationContext.xml(在类路径中):

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
    <bean name="a" class="A"/>
</beans>

A.java:

class A {
    private ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");

    public static void main(String[] args) {
        A a = new A();
    }
}

最佳答案

不是质疑你的方法,而是为什么这是必要的?如果一个 bean 想要一个指向它所属的应用程序上下文的指针,它应该实现 ApplicationContextAware .您将实现一个 setter,Spring 会将应用程序上下文注入(inject)到 bean 中。

除非我弄错了,否则您的示例代码实际上不会为该 bean 提供指向其应用程序上下文的指针,它将使用与以前相同的 XML 文件启动一个应用程序上下文。这将依次创建一个新的 bean,它将启动另一个 应用程序上下文,等等——一个无限循环。尝试您的代码,看看是否会发生这种情况。

关于java - 如果 bean 试图在其构造函数中加载 Spring 应用程序上下文,会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2923763/

相关文章:

spring - Spring中的DispatcherServlet和ContextLoaderListener

java - 解压文件真的很慢

java - 在@Configuration类中使用application.properties,@Bean方法现在可以工作

gradle - Gradle dockerCompose插件为所有任务保留最新配置

java - 将 spel 与 Hibernate Table 和 Flyway 一起使用

java - 使用 Java Spring REST 服务并解决 angular.js 问题

email - 在 CrafterCMS 中,设置工作流程还需要什么?

java - 如何使用 Java 在特定时间触发一个方法?

java - 如何使用sql事务?

Java匹配两个字符串之间的每两个序列字符