1

다음 스프링 애플리케이션 컨텍스트와 클래스 A가 주어지면 클래스 A를 실행할 때 어떤 일이 발생합니까? (클래스 경로에)빈이 생성자에 Spring 애플리케이션 컨텍스트를로드하려고하면 어떻게 될까?

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(); 
    } 
} 
+0

http://stackoverflow.com/questions/2923813/how-should-each-class-in-an-application-retrieve-the-spring-application-context에 관련 질문을 게시했습니다. –

답변

5

당신의 접근 방식에 의문을 제기하지, 그런데 왜이 필요하다? Bean이 일부인 응용 프로그램 컨텍스트에 대한 포인터를 원하면 ApplicationContextAware을 구현해야합니다. setter를 구현하고 Spring이 빈에 앱 컨텍스트를 주입 할 것이다.

샘플 코드가 실제로 해당 빈에 해당 컨텍스트에 대한 포인터를 제공하지 않으면 이전과 동일한 XML 파일을 사용하여 새로운 앱 컨텍스트를 시작합니다. 그러면 새로운 빈이 생성되어 또 다른 앱 컨텍스트 등이 시작됩니다. - 무한 루프. 코드를 시험해보고 이것이 발생하는지 확인하십시오.

+1

네, 그게 정확히 무슨 일이야! 우리는이 오류가 우리 자신의 응용 프로그램에서 발생하고 다른 누군가가 우리의 실수를 피할 수 있도록 경험을 공유하고 싶었습니다. –

+0

그런데 bean이 존재하는 응용 컨텍스트에 대한 참조를 얻을 수있는 방법을 설명해 주셔서 감사합니다. –

관련 문제