Direct reference to JDK 7 AutoCloseable interface

Issue: SPR-13188
master
Juergen Hoeller 8 years ago
parent c316088dd2
commit 249b798059
  1. 17
      spring-beans/src/main/java/org/springframework/beans/factory/support/DisposableBeanAdapter.java

@ -16,7 +16,6 @@
package org.springframework.beans.factory.support; package org.springframework.beans.factory.support;
import java.io.Closeable;
import java.io.Serializable; import java.io.Serializable;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; import java.lang.reflect.Method;
@ -68,18 +67,6 @@ class DisposableBeanAdapter implements DisposableBean, Runnable, Serializable {
private static final Log logger = LogFactory.getLog(DisposableBeanAdapter.class); private static final Log logger = LogFactory.getLog(DisposableBeanAdapter.class);
private static Class<?> closeableInterface;
static {
try {
closeableInterface = ClassUtils.forName("java.lang.AutoCloseable",
DisposableBeanAdapter.class.getClassLoader());
}
catch (ClassNotFoundException ex) {
closeableInterface = Closeable.class;
}
}
private final Object bean; private final Object bean;
@ -191,7 +178,7 @@ class DisposableBeanAdapter implements DisposableBean, Runnable, Serializable {
private String inferDestroyMethodIfNecessary(Object bean, RootBeanDefinition beanDefinition) { private String inferDestroyMethodIfNecessary(Object bean, RootBeanDefinition beanDefinition) {
String destroyMethodName = beanDefinition.getDestroyMethodName(); String destroyMethodName = beanDefinition.getDestroyMethodName();
if (AbstractBeanDefinition.INFER_METHOD.equals(destroyMethodName) || if (AbstractBeanDefinition.INFER_METHOD.equals(destroyMethodName) ||
(destroyMethodName == null && closeableInterface.isInstance(bean))) { (destroyMethodName == null && bean instanceof AutoCloseable)) {
// Only perform destroy method inference or Closeable detection // Only perform destroy method inference or Closeable detection
// in case of the bean not explicitly implementing DisposableBean // in case of the bean not explicitly implementing DisposableBean
if (!(bean instanceof DisposableBean)) { if (!(bean instanceof DisposableBean)) {
@ -406,7 +393,7 @@ class DisposableBeanAdapter implements DisposableBean, Runnable, Serializable {
* @param beanDefinition the corresponding bean definition * @param beanDefinition the corresponding bean definition
*/ */
public static boolean hasDestroyMethod(Object bean, RootBeanDefinition beanDefinition) { public static boolean hasDestroyMethod(Object bean, RootBeanDefinition beanDefinition) {
if (bean instanceof DisposableBean || closeableInterface.isInstance(bean)) { if (bean instanceof DisposableBean || bean instanceof AutoCloseable) {
return true; return true;
} }
String destroyMethodName = beanDefinition.getDestroyMethodName(); String destroyMethodName = beanDefinition.getDestroyMethodName();

Loading…
Cancel
Save