Java 5 Closeable and Java 7 AutoCloseable automatically detected as destroy methods
Also, @Bean destroy method inference not applying for DisposableBean implementers anymore (avoiding double destruction). Issue: SPR-10034
This commit is contained in:
@@ -16,6 +16,7 @@
|
||||
|
||||
package org.springframework.beans.factory;
|
||||
|
||||
import java.io.Closeable;
|
||||
import java.lang.reflect.Field;
|
||||
import java.net.MalformedURLException;
|
||||
import java.security.AccessControlContext;
|
||||
@@ -1909,7 +1910,6 @@ public class DefaultListableBeanFactoryTests {
|
||||
public Object postProcessBeforeInitialization(Object bean, String beanName) {
|
||||
return new TestBean();
|
||||
}
|
||||
|
||||
public Object postProcessAfterInitialization(Object bean, String beanName) {
|
||||
return bean;
|
||||
}
|
||||
@@ -1920,6 +1920,25 @@ public class DefaultListableBeanFactoryTests {
|
||||
assertTrue("Destroy method invoked", BeanWithDisposableBean.closed);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBeanPostProcessorWithWrappedObjectAndCloseable() {
|
||||
DefaultListableBeanFactory lbf = new DefaultListableBeanFactory();
|
||||
RootBeanDefinition bd = new RootBeanDefinition(BeanWithCloseable.class);
|
||||
lbf.registerBeanDefinition("test", bd);
|
||||
lbf.addBeanPostProcessor(new BeanPostProcessor() {
|
||||
public Object postProcessBeforeInitialization(Object bean, String beanName) {
|
||||
return new TestBean();
|
||||
}
|
||||
public Object postProcessAfterInitialization(Object bean, String beanName) {
|
||||
return bean;
|
||||
}
|
||||
});
|
||||
BeanWithDisposableBean.closed = false;
|
||||
lbf.preInstantiateSingletons();
|
||||
lbf.destroySingletons();
|
||||
assertTrue("Destroy method invoked", BeanWithCloseable.closed);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBeanPostProcessorWithWrappedObjectAndDestroyMethod() {
|
||||
DefaultListableBeanFactory lbf = new DefaultListableBeanFactory();
|
||||
@@ -1930,7 +1949,6 @@ public class DefaultListableBeanFactoryTests {
|
||||
public Object postProcessBeforeInitialization(Object bean, String beanName) {
|
||||
return new TestBean();
|
||||
}
|
||||
|
||||
public Object postProcessAfterInitialization(Object bean, String beanName) {
|
||||
return bean;
|
||||
}
|
||||
@@ -2250,6 +2268,16 @@ public class DefaultListableBeanFactoryTests {
|
||||
}
|
||||
|
||||
|
||||
public static class BeanWithCloseable implements Closeable {
|
||||
|
||||
private static boolean closed;
|
||||
|
||||
public void close() {
|
||||
closed = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static class BeanWithDestroyMethod {
|
||||
|
||||
private static boolean closed;
|
||||
|
||||
Reference in New Issue
Block a user