2012-09-10 3 views
2

ApplicationContextInitializer 구현에 사용 된 리소스를 어떻게 올바르게 종료 할 수 있습니까?ApplicationContextInitializer의 셧다운

저는 큐레이터 프로젝트를 사용하여 동물원에 연결하고 속성 파일을 얻는 ApplicationContextInitializer 구현을 만들었습니다. 그런 다음 Properties 인스턴스 인 PropertiesPropertySource을 만들고이를 컨텍스트에 추가합니다.

응용 프로그램이 종료되면 CuratorFramework 인스턴스에서 내 이니셜 라이저에 속한 close()으로 전화를 걸고 싶습니다. 가장 좋은 방법은 무엇입니까?

CuratorFramework 인스턴스 을 컨텍스트로으로 전달할 수 있습니까? 콩으로 사용할 수 있습니까?

나는 봄 이벤트를 가져옵니다 빈을 만들고, 그 큐레이터 종료 할 때 사용하는
+0

@sbridges : 태그를 추가해 주셔서 감사합니다! –

답변

1

,

public class CuratorDisposer implements DisposableBean { 
    private CuratorFramework delegate; //set through spring somehow 

    public void destroy() { 
      delegate.close(); 
    } 
} 
1

응용 프로그램이 종료 될 때, 나는 (CLOSE 호출 할 수 있도록하고 싶습니다) 이니셜 라이저의 멤버 인 CuratorFramework 인스턴스에. 이 방법이 가장 효과적입니까?

이니셜 라이저 클래스에 ApplicationListener을 구현 한 다음 자신을 컨텍스트의 수신기로 등록 할 수 있습니다. 그런 다음 컨텍스트가 종료 될 때 ContextClosedEvent을 받게됩니다.

는 또한에 컨텍스트를 CuratorFramework 예를 을 통과 할 수, 그래서 나는 빈으로 사용할 수 있습니까?

RootBeanDefinition cfDef = new RootBeanDefinition(MethodInvokingFactoryBean.class); 
cfDef.getPropertyValues().add("targetClass", MyInitializer.class); 
cfDef.getPropertyValues().add("targetObject", this); 
cfDef.getPropertyValues().add("targetMethod", "getCuratorFramework"); 
((BeanDefinitionRegistry)ctx).registerBeanDefinition("curatorFramework", cfDef); 

을하고 CuratorFramework 당신이 초기화시에 작성 반환하여 초기화 클래스에 getCuratorFramework() 방법을 추가

당신은 아마도 당신의 이니셜이 같은 일을 할 수있다 (테스트하지).