当前位置: 首页 > 知识库问答 >
问题:

如何实现在原型上调用destroy方法的bean-post处理器?

聂煜
2023-03-14

你能澄清一下吗?

共有1个答案

闻人栋
2023-03-14

Spring有一个可以实现的接口,称为DestructionaWareBeanPostProcessor。首先通过RequiresDestroy()方法询问该接口的实例是否需要销毁bean。如果返回true,那么当bean即将通过PostProcessBeforeDestroycle方法销毁时,您最终将再次调用该bean。

这样做的目的是让您有机会清理该bean的资源。例如,如果您的bean引用了一个文件,您可以关闭任何可能打开的流。重要的一点是,您的类没有包含对即将被销毁的bean的引用,否则您将阻止它被垃圾收集,正如您所指出的那样。

要定义后处理程序,可以执行如下操作(未经测试

@Component
public class MyDestructionAwareBeanPostProcessor implements DestructionAwareBeanPostProcessor {
    public boolean requiresDestruction(final Object bean) {
        // Insert logic here
        return bean instanceof MyResourceHolder;
    }

    public void postProcessBeforeDestruction(final Object bean, final String beanName) throws BeansException {
        // Clean up bean here.
        // Example:
        ((MyResourceHolder)bean).cleanup();
    }
}
 类似资料:
  • 应该怎么修改代码呀?才能运行过去 解决问题

  • 问题内容: 这是我先前提出的问题的后续措施。 Tomcat 5.0.28有一个错误,即容器在关闭时未调用Servlet的destroy()方法。这已在Tomcat 5.0.30中修复,但是如果Servlet的destroy()方法具有System.exit(),则将导致Tomcat Windows服务抛出错误1053,并拒绝正常关闭(有关更多详细信息,请参见上面的链接)这个错误) 任何人都不知道是

  • 如何在原型范围bean上应用spring aop方面 但令人惊讶的是,在调用原型bean的joinpoint方法时,方面并没有执行。我确信我创建的切入点是正确的,因为在eclipse中,aspectJ插件在joinPoint方法上显示了aspectJ引用的可视化标记,这表明切入点是正确的,但不确定为什么在运行时调用PrototypeBean的joinPoint方法时没有执行它。 我是以不正确的方式

  • 我正在尝试使用Flutter编写移动应用程序。不幸的是,我需要实现一个Flutter插件才能调用一些原生API。 Objective-C对我来说太陌生了,所以我真的更喜欢使用Swift(我也不太了解,但它离Kotlin很近,我觉得很熟悉)来创建插件。 我通过Flatter获得了插件框架设置,但现在我正在尝试实现方法处理函数: 我尝试使用的本机函数具有以下签名(使用gomobile生成): 但有几件

  • 使用quare https://github.com/Square/OkHttp的OkHttp,我如何: 检索从服务器返回的cookie 为即将到来的请求存储cookie 在后续请求中使用存储的cookie 更新后续请求返回的cookie 理想情况下,cookie将随每个请求自动存储、重新发送和更新。

  • 这是我的豆子 这是我的路线 您可能会在上面的路由中找到一些语法问题,但它工作正常(此处复制的代码不准确) 想知道,我们可以看到bean正在路由中使用,这是类的一个实例,但是它是如何在路由中调用方法的呢?路由是如何知道调用和打印哪个方法的?