春天和@ windsor城堡里面有@predestroy之类的东西

时间:2011-05-07 08:35:05

标签: spring annotations castle-windsor

春天框架中有@PreDestroy之类的东西吗?

4 个答案:

答案 0 :(得分:15)

如果定义了一个实现DisposableBean接口的bean,那么Spring将调用

void destroy() throws Exception;
在删除bean之前的

方法。

这是一种方式,另一种方式是你的bean不必实现给定的接口。 在你的一个ConfigurationSupport类中,你的bean必须被定义为带有@Bean注释的pulic方法。

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

      return yourBean;
   }

必须在YourBean.class中定义“yourDestroyMethod”方法,然后Spring会在销毁bean之前调用它。

有关详细信息,请参阅Spring文档:Destruction callbacks

<强>更新

第三种方式...... 我甚至会说更好的方法是指定bean的“init-method”和“destroy-method”......就像这样:{{3 }}

这解决了第三方依赖bean的问题,并解放了代码不必要的Spring接口..

答案 1 :(得分:6)

有三种方法可以做到。

  

@PreDestroy标签

     

xml中的destroy-method

     

如上所述的DisposableBean接口

我的faivorite是@PreDestroy方法。

为此你需要:

在application-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,你想在调用shutdown回调时运行一些代码。   注册bean。

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();

请注意: AbstractApplicationContext 具有 registerShutdownHook()的实现,因此这是您可以使用的最小类。

此外,如果您可以对类使用 destroy-method 标记,则无法控制其实现。例如,您可以在applcation-context.xml中添加它:

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

destroy-method值可以具有任何可见性,但不需要参数。

希望这有帮助!

答案 2 :(得分:3)

您的意思是使用标准JDK @PreDestroy注释方法吗?这在Spring中很常见,通常比在XML中使用bean声明上的destroy-method属性更好。您所要做的就是包括

<context:annotation-config/> 

在配置文件中,Spring处理剩下的工作。

答案 3 :(得分:0)

有标准的.NET IDisposable.Dispose()方法。我不知道Spring,但是通过快速的谷歌搜索,似乎@predestroy几乎是相同的概念。