给定以下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将把应用程序上下文注入到bean中。

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

10-06 07:12