Example usage for org.springframework.beans.factory.config DestructionAwareBeanPostProcessor postProcessBeforeDestruction

List of usage examples for org.springframework.beans.factory.config DestructionAwareBeanPostProcessor postProcessBeforeDestruction

Introduction

In this page you can find the example usage for org.springframework.beans.factory.config DestructionAwareBeanPostProcessor postProcessBeforeDestruction.

Prototype

void postProcessBeforeDestruction(Object bean, String beanName) throws BeansException;

Source Link

Document

Apply this BeanPostProcessor to the given bean instance before its destruction, e.g.

Usage

From source file:org.springframework.beans.factory.support.DisposableBeanAdapter.java

@Override
public void destroy() {
    if (!CollectionUtils.isEmpty(this.beanPostProcessors)) {
        for (DestructionAwareBeanPostProcessor processor : this.beanPostProcessors) {
            processor.postProcessBeforeDestruction(this.bean, this.beanName);
        }/*from   w  w w .j  a  v a  2 s . c om*/
    }

    if (this.invokeDisposableBean) {
        if (logger.isDebugEnabled()) {
            logger.debug("Invoking destroy() on bean with name '" + this.beanName + "'");
        }
        try {
            if (System.getSecurityManager() != null) {
                AccessController.doPrivileged((PrivilegedExceptionAction<Object>) () -> {
                    ((DisposableBean) bean).destroy();
                    return null;
                }, acc);
            } else {
                ((DisposableBean) bean).destroy();
            }
        } catch (Throwable ex) {
            String msg = "Invocation of destroy method failed on bean with name '" + this.beanName + "'";
            if (logger.isDebugEnabled()) {
                logger.warn(msg, ex);
            } else {
                logger.warn(msg + ": " + ex);
            }
        }
    }

    if (this.destroyMethod != null) {
        invokeCustomDestroyMethod(this.destroyMethod);
    } else if (this.destroyMethodName != null) {
        Method methodToCall = determineDestroyMethod(this.destroyMethodName);
        if (methodToCall != null) {
            invokeCustomDestroyMethod(methodToCall);
        }
    }
}