2012-10-09 2 views
1

저는 봄용입니다. 봄의 소스 코드를 읽기 시작합니다.AbstractApplicationContext에서 메소드 start()의 용도는 무엇입니까?

AbstractApplicationContext를 읽었을 때 start() 메서드가 하나 있는데, ApplicationContext가 초기화 될 때 메서드가 호출되지 않는다는 것을 알았습니다.

내 질문 : 1) 방법의 사용법은 무엇입니까? 단어 (시작) 의미에 따르면, 나는 그것이 ApplicationContext가 작동하기 전에 호출되어야한다고 생각한다. 그러나 그렇지 않습니다.

2) 어떻게 시작하는 applicationContext 이벤트를들을 수 있습니까? 코드를 읽은 후, 메소드가 ContextStartedEvent를 공개한다는 것을 알았습니다. 하지만 컨텍스트를 초기화하는 경우 컨텍스트는 여전히 작동 할 수 있으며 이벤트를 게시하지 않습니다. 이벤트를 수신하여 applicationcontext의 시작을 추적 할 수 없습니다.

답변

2

start 메서드는 응용 프로그램 시작 프로세스의 일부로 호출되는 Lifecycle 인터페이스의 일부입니다.

컨텍스트가 시작될 때 알림을 받으려면 라이프 사이클 인터페이스를 구현하는 bean을 선언해야합니다.

+0

내 이해하는 방법이다 LifecycleProcessor 인터페이스를 구현 lifecycleProcessor라는 맥락에서 콩이 단지입니다 않는 한

public class org.example.MyLifecycle implements Lifecycle { private boolean started = false; public boolean isRunning() { return started; } public void start() { System.err.println("MyLifecycle starting"); started = true; } public void stop() { System.err.println("MyLifecycle stopping"); started = false; } } 

그런 다음

<bean class="org.example.MyLifecycle"/> 

모든 DefaultLifecycleProcessor으로, 기본적으로 처리됩니다 라이프 사이클을위한 간단한 구현? 사용자가 자체 구현을 정의하지 않은 경우에 맞습니까? – ChandlerSong

+0

Spring 내에서 사용되는 'Lifecycle' 인터페이스의 일부이며, 필요에 따라 자신의 클래스에서 사용할 수 있습니다. 기본적으로 컨텍스트에 등록 된 bean이'Lifecycle'을 구현하면 필요한 경우'start' 및'stop' 메소드가 호출됩니다. 일반적으로'ApplicationContext'는 이런 식으로'start' 될 필요는 없습니다. 'refresh '를 호출하는 것이 가장 빈번하다. 'Lifecycle' 인터페이스와 일치하는 라이프 사이클을 필요로하는 컴포넌트가 있다면, 좋은 선택입니다. – ptomli

+0

이미 약간 관련있는 질문이 있습니다. http://stackoverflow.com/questions/5333189/is-it-neccesary-to-call-applicationcontext-start – ptomli

관련 문제