春天的核心。默认的@Bean destroy方法

时间:2017-06-26 09:42:47

标签: java spring release

我有自己的豆子:

@Bean
public MyBean myBean(){...

按照spring文档发布自己的资源,我应该指定destroyMethod。如果没有直接指定destroyMethod,我还没有找到弹簧调用的默认destroy方法。

我用过

@Bean(destroyMethod = "close")
public MyBean myBean(){...

但是如果它默认具有值,可以考虑不直接指定destroy方法。

春天是否会默认尝试destroycloserelease? 如果spring默认尝试一些方法来释放资源 - 哪些?

4 个答案:

答案 0 :(得分:24)

Bean.destroyMethod中所述:

  

为方便用户,容器将尝试推断a   针对从@Bean方法返回的对象的destroy方法。对于   给定一个@Bean方法返回Apache Commons DBCP   BasicDataSource,容器会注意到close()方法   在该对象上可用并自动将其注册为   destroyMethod。这种破坏方法推断'目前有限   仅检测名为“关闭”的公共,非参数方法。或者'关闭'。

换句话说,如果您没有指定destroyMethod,但bean有公共close()shutdown()方法,它将自动用作destroy-method

要停用此推理,请使用@Bean(destroyMethod = "")

答案 1 :(得分:6)

org.springframework.beans.factory.DisposableBean接口指定一个方法 -

void destroy() throws Exception;

简单地实施 -

public class ExampleBean implements DisposableBean {
   public void destroy() {
      // do some destruction work
   }
}

用于基于XML的配置

<bean id = "exampleBean" class = "examples.ExampleBean" destroy-method = "destroy"/>

并在bean中

public class ExampleBean {
   public void destroy() {
      // do some destruction work
   }
}

或使用@PreDestroy注释

答案 2 :(得分:5)

您可以实现一个方法,该方法将在使用@PreDestroy

销毁并注释之前执行
@PreDestroy
public void methodName() {
    //Your code..
}

答案 3 :(得分:2)

您可以延长DisposableBeanAdapter课程。它提供的方法之一是Spring调用的destroy方法。这样,当您使用DisposableBean界面时,您无需提供任何实施。