2011-05-07 2 views

답변

14

다음 Spring은 빈을 destrying 전에

void destroy() throws Exception; 

메소드를 호출합니다.

그건 한 가지 방법이고, 다른 하나는 bean이 주어진 인터페이스를 구현할 필요가 없을 때입니다. 당신의 ConfigurationSupport 클래스 중 하나에서 당신의 bean은 @Bean 어노테이션을 가진 pulic 메소드로 정의되어야합니다.

@Bean (destroyMethod="yourDestroyMethod") 
    public YourBean yourBean() { 
     YourBean yourBean = new YourBean(); 

     return yourBean; 
    } 

방법 "yourDestroyMethod는"YourBean.class에 정의되어야하고 봄은 빈을 파괴하기 전에 호출합니다. 더 많은 정보를 들어

는 봄 문서를 참조하십시오 Destruction callbacks

UPDATE

세 번째 방법을 ... 나는 심지어 "이 될 것 더 나은 방법에서 지정할"초기화 메소드 "를 말하고 것 bean의 "destroy-method"와 같이 ... mkyong.com/spring/spring-init-method-and-destroy-method-example

이것은 타사 종속성 bean의 문제점을 해결하고 불필요한 Spring 인터페이스를 해방시킵니다.

+0

알 수는 없지만 @PostConstruct 및 @PreDestroy 주석이 있다는 것을 알았습니다. 참조 : http://static.springsource.org/spring/docs/3.0.x/reference/beans.html#beans-postconstruct-and-predestroy-annotations – davorp

+1

@PostConstruct와 @PreDestroy가 다른 것보다 훨씬 뚜렷하다는 것을 알았습니다. 이런 종류의 일을하는 방법; 그것은 마술을 최소화합니다. –

+0

이것은 내가 찾고 있었던 것이다! 설명서는 DisposableBean과 @PreDestroy에 대해 이야기하지만, org.apache.commons.dbcp.BasicDataSource와 같은 타사 클래스에 대해이 코드를 어떻게 지정할 수 있는지 궁금합니다. 매우 감사합니다! –

3

표준 JDK @PreDestroy으로 메소드에 주석을 추가하는 것과 같은 의미입니까? 이는 스프링에서 일반적으로 충분하며 일반적으로 XML의 빈 선언에 destroy-method 속성을 사용하는 것보다 낫습니다. 당신이해야 할 일은 다음과 같습니다.

<context:annotation-config/> 

구성 파일에는 Spring이 나머지를 처리합니다.

0

표준 .NET IDisposable.Dispose() 방법이 있습니다. 나는 봄을 알지 못한다. 그러나 빠른 인터넷 검색에서 @predestroy는 거의 같은 개념이다. 당신은 DisposableBean 표시 인터페이스를 구현하는 bean을 정의하면

6

세 가지 방법이 있습니다.

내 faivorite이 @PreDestroy 방법입니다 위의 XML에서

@PreDestroy 태그

파괴-방법은

DisposableBean 표시 인터페이스 명시된 바와 같이.

유 필요 수행하십시오에서

응용 프로그램-context.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" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
          http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
          http://www.springframework.org/schema/context 
          http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 

    <bean id="shutDownBean" class="spring.ShutDownBean" /> 
    <context:annotation-config/> 
</beans> 

@PreDestroy 및 태그를 사용할 수있는 @PostDestroy한다. 이제 종료 콜백이 호출 될 때 일부 코드를 실행하려는 ShutDownBean이 있다고 가정 해 보겠습니다. 은 빈을 등록합니다.

import javax.annotation.PreDestroy; 

public final class ShutDownBean { 

    @PreDestroy 
    public static void shutDownMethod() { 
     System.out.println("Shutting down!"); 
    } 

} 

이제 끝났습니다.

당신은 당신이 이런 식으로 닫습니다 필요가 @PreDestroy 어노테이션 사용 후 데스크톱 응용 프로그램이있는 경우 :

AbstractApplicationContext applicationContext = 
       new ClassPathXmlApplicationContext("application-context.xml"); 
applicationContext.registerShutdownHook(); 

참고 : AbstractApplicationContextregisterShutdownHook (의 구현이) 그래서이 당신이 사용할 수있는 최소 클래스입니다.

또한 클래스의 파괴 방법 태그를 사용할 수있는 경우 구현을 제어하지 않습니다. 예를 들어, 당신은 당신의 applcation-context.xml에이를 추가 할 수 있습니다

<bean id = "dataSource" 
     class = "org.apache.commons.dbcp.BasicDataSrouce" 
     destroy-method = "close"> 

는 파괴-방법 값은 가시성을 가지고 있지만 인수가없는 필요가 있습니다.

희망이 도움이됩니다.

관련 문제