Что произойдет, если бин попытается загрузить контекст приложения Spring в своем конструкторе? - PullRequest
1 голос
/ 27 мая 2010

Учитывая следующий контекст приложения 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();
    }
}

1 Ответ

5 голосов
/ 27 мая 2010

Не ставить под сомнение ваш подход, но зачем это нужно? Если боб хочет указатель на контекст приложения, частью которого он является, он должен реализовать ApplicationContextAware . Вы реализуете сеттер, и Spring вставляет контекст приложения в bean-компонент.

Если я не ошибаюсь, ваш пример кода не даст этому бину указатель на его контекст приложения, он запустит новый контекст приложения, используя тот же XML-файл, что и раньше. Это в свою очередь создаст новый bean-компонент, который запустит другой контекст приложения и т. Д. - бесконечный цикл. Попробуйте свой код и посмотрите, произойдет ли это.

...