diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/config/AutowireCapableBeanFactory.java b/spring-beans/src/main/java/org/springframework/beans/factory/config/AutowireCapableBeanFactory.java index e71eb1a899..003ab7e2ce 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/config/AutowireCapableBeanFactory.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/config/AutowireCapableBeanFactory.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -302,6 +302,16 @@ public interface AutowireCapableBeanFactory extends BeanFactory { Object applyBeanPostProcessorsAfterInitialization(Object existingBean, String beanName) throws BeansException; + /** + * Destroy the given bean instance (typically coming from {@link #createBean}), + * applying the {@link org.springframework.beans.factory.DisposableBean} contract as well as + * registered {@link DestructionAwareBeanPostProcessor DestructionAwareBeanPostProcessors}. + *
Any exception that arises during destruction should be caught
+ * and logged instead of propagated to the caller of this method.
+ * @param existingBean the bean instance to destroy
+ */
+ void destroyBean(Object existingBean);
+
/**
* Resolve the specified dependency against the beans defined in this factory.
* @param descriptor the descriptor for the dependency
diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractAutowireCapableBeanFactory.java b/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractAutowireCapableBeanFactory.java
index 09faf0c3b2..b589b1a6c6 100644
--- a/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractAutowireCapableBeanFactory.java
+++ b/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractAutowireCapableBeanFactory.java
@@ -417,6 +417,10 @@ public abstract class AbstractAutowireCapableBeanFactory extends AbstractBeanFac
return result;
}
+ public void destroyBean(Object existingBean) {
+ new DisposableBeanAdapter(existingBean, getBeanPostProcessors(), getAccessControlContext()).destroy();
+ }
+
//---------------------------------------------------------------------
// Implementation of relevant AbstractBeanFactory template methods
diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/support/DisposableBeanAdapter.java b/spring-beans/src/main/java/org/springframework/beans/factory/support/DisposableBeanAdapter.java
index 6a498344a9..672c892431 100644
--- a/spring-beans/src/main/java/org/springframework/beans/factory/support/DisposableBeanAdapter.java
+++ b/spring-beans/src/main/java/org/springframework/beans/factory/support/DisposableBeanAdapter.java
@@ -85,14 +85,14 @@ class DisposableBeanAdapter implements DisposableBean, Runnable, Serializable {
private final boolean nonPublicAccessAllowed;
+ private final AccessControlContext acc;
+
private String destroyMethodName;
private transient Method destroyMethod;
private List