diff --git a/spring-context/src/test/java/org/springframework/context/annotation/InitDestroyMethodLifecycleTests.java b/spring-context/src/test/java/org/springframework/context/annotation/InitDestroyMethodLifecycleTests.java
new file mode 100644
index 000000000000..034452bc0512
--- /dev/null
+++ b/spring-context/src/test/java/org/springframework/context/annotation/InitDestroyMethodLifecycleTests.java
@@ -0,0 +1,279 @@
+/*
+ * Copyright 2002-2022 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.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.context.annotation;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+
+import org.junit.jupiter.api.Test;
+
+import org.springframework.beans.factory.DisposableBean;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.beans.factory.support.DefaultListableBeanFactory;
+import org.springframework.beans.factory.support.RootBeanDefinition;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Tests which verify expected init and destroy bean lifecycle
+ * behavior as requested in
+ * SPR-3775.
+ *
+ *
Specifically, combinations of the following are tested:
+ *
+ * - {@link InitializingBean} & {@link DisposableBean} interfaces
+ * - Custom {@link RootBeanDefinition#getInitMethodName() init} &
+ * {@link RootBeanDefinition#getDestroyMethodName() destroy} methods
+ * - JSR 250's {@link javax.annotation.PostConstruct @PostConstruct} &
+ * {@link javax.annotation.PreDestroy @PreDestroy} annotations
+ *
+ *
+ * @author Sam Brannen
+ * @since 2.5
+ */
+class InitDestroyMethodLifecycleTests {
+
+ @Test
+ void initDestroyMethods() {
+ Class> beanClass = InitDestroyBean.class;
+ DefaultListableBeanFactory beanFactory = createBeanFactoryAndRegisterBean(beanClass, "afterPropertiesSet", "destroy");
+ InitDestroyBean bean = beanFactory.getBean(InitDestroyBean.class);
+ assertThat(bean.initMethods).as("init-methods").containsExactly("afterPropertiesSet");
+ beanFactory.destroySingletons();
+ assertThat(bean.destroyMethods).as("destroy-methods").containsExactly("destroy");
+ }
+
+ @Test
+ void initializingDisposableInterfaces() {
+ Class> beanClass = CustomInitializingDisposableBean.class;
+ DefaultListableBeanFactory beanFactory = createBeanFactoryAndRegisterBean(beanClass, "customInit", "customDestroy");
+ CustomInitializingDisposableBean bean = beanFactory.getBean(CustomInitializingDisposableBean.class);
+ assertThat(bean.initMethods).as("init-methods").containsExactly("afterPropertiesSet", "customInit");
+ beanFactory.destroySingletons();
+ assertThat(bean.destroyMethods).as("destroy-methods").containsExactly("destroy", "customDestroy");
+ }
+
+ @Test
+ void initializingDisposableInterfacesWithShadowedMethods() {
+ Class> beanClass = InitializingDisposableWithShadowedMethodsBean.class;
+ DefaultListableBeanFactory beanFactory = createBeanFactoryAndRegisterBean(beanClass, "afterPropertiesSet", "destroy");
+ InitializingDisposableWithShadowedMethodsBean bean = beanFactory.getBean(InitializingDisposableWithShadowedMethodsBean.class);
+ assertThat(bean.initMethods).as("init-methods").containsExactly("InitializingBean.afterPropertiesSet");
+ beanFactory.destroySingletons();
+ assertThat(bean.destroyMethods).as("destroy-methods").containsExactly("DisposableBean.destroy");
+ }
+
+ @Test
+ void jsr250Annotations() {
+ Class> beanClass = CustomAnnotatedInitDestroyBean.class;
+ DefaultListableBeanFactory beanFactory = createBeanFactoryAndRegisterBean(beanClass, "customInit", "customDestroy");
+ CustomAnnotatedInitDestroyBean bean = beanFactory.getBean(CustomAnnotatedInitDestroyBean.class);
+ assertThat(bean.initMethods).as("init-methods").containsExactly("postConstruct", "afterPropertiesSet", "customInit");
+ beanFactory.destroySingletons();
+ assertThat(bean.destroyMethods).as("destroy-methods").containsExactly("preDestroy", "destroy", "customDestroy");
+ }
+
+ @Test
+ void jsr250AnnotationsWithShadowedMethods() {
+ Class> beanClass = CustomAnnotatedInitDestroyWithShadowedMethodsBean.class;
+ DefaultListableBeanFactory beanFactory = createBeanFactoryAndRegisterBean(beanClass, "customInit", "customDestroy");
+ CustomAnnotatedInitDestroyWithShadowedMethodsBean bean = beanFactory.getBean(CustomAnnotatedInitDestroyWithShadowedMethodsBean.class);
+ assertThat(bean.initMethods).as("init-methods").containsExactly("@PostConstruct.afterPropertiesSet", "customInit");
+ beanFactory.destroySingletons();
+ assertThat(bean.destroyMethods).as("destroy-methods").containsExactly("@PreDestroy.destroy", "customDestroy");
+ }
+
+ @Test
+ void jsr250AnnotationsWithCustomPrivateInitDestroyMethods() {
+ Class> beanClass = CustomAnnotatedPrivateInitDestroyBean.class;
+ DefaultListableBeanFactory beanFactory = createBeanFactoryAndRegisterBean(beanClass, "customInit1", "customDestroy1");
+ CustomAnnotatedPrivateInitDestroyBean bean = beanFactory.getBean(CustomAnnotatedPrivateInitDestroyBean.class);
+ assertThat(bean.initMethods).as("init-methods").containsExactly("@PostConstruct.privateCustomInit1", "afterPropertiesSet");
+ beanFactory.destroySingletons();
+ assertThat(bean.destroyMethods).as("destroy-methods").containsExactly("@PreDestroy.privateCustomDestroy1", "destroy");
+ }
+
+ @Test
+ void jsr250AnnotationsWithCustomSameMethodNames() {
+ Class> beanClass = CustomAnnotatedPrivateSameNameInitDestroyBean.class;
+ DefaultListableBeanFactory beanFactory = createBeanFactoryAndRegisterBean(beanClass, "customInit1", "customDestroy1");
+ CustomAnnotatedPrivateSameNameInitDestroyBean bean = beanFactory.getBean(CustomAnnotatedPrivateSameNameInitDestroyBean.class);
+ assertThat(bean.initMethods).as("init-methods").containsExactly("@PostConstruct.privateCustomInit1", "@PostConstruct.sameNameCustomInit1", "afterPropertiesSet");
+ beanFactory.destroySingletons();
+ assertThat(bean.destroyMethods).as("destroy-methods").containsExactly("@PreDestroy.sameNameCustomDestroy1", "@PreDestroy.privateCustomDestroy1", "destroy");
+ }
+
+ @Test
+ void allLifecycleMechanismsAtOnce() {
+ Class> beanClass = AllInOneBean.class;
+ DefaultListableBeanFactory beanFactory = createBeanFactoryAndRegisterBean(beanClass, "afterPropertiesSet", "destroy");
+ AllInOneBean bean = beanFactory.getBean(AllInOneBean.class);
+ assertThat(bean.initMethods).as("init-methods").containsExactly("afterPropertiesSet");
+ beanFactory.destroySingletons();
+ assertThat(bean.destroyMethods).as("destroy-methods").containsExactly("destroy");
+ }
+
+
+ private static DefaultListableBeanFactory createBeanFactoryAndRegisterBean(Class> beanClass,
+ String initMethodName, String destroyMethodName) {
+
+ DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
+ RootBeanDefinition beanDefinition = new RootBeanDefinition(beanClass);
+ beanDefinition.setInitMethodName(initMethodName);
+ beanDefinition.setDestroyMethodName(destroyMethodName);
+ beanFactory.addBeanPostProcessor(new CommonAnnotationBeanPostProcessor());
+ beanFactory.registerBeanDefinition("lifecycleTestBean", beanDefinition);
+ return beanFactory;
+ }
+
+
+ static class InitDestroyBean {
+
+ final List initMethods = new ArrayList<>();
+ final List destroyMethods = new ArrayList<>();
+
+
+ public void afterPropertiesSet() throws Exception {
+ this.initMethods.add("afterPropertiesSet");
+ }
+
+ public void destroy() throws Exception {
+ this.destroyMethods.add("destroy");
+ }
+ }
+
+ static class InitializingDisposableWithShadowedMethodsBean extends InitDestroyBean implements
+ InitializingBean, DisposableBean {
+
+ @Override
+ public void afterPropertiesSet() throws Exception {
+ this.initMethods.add("InitializingBean.afterPropertiesSet");
+ }
+
+ @Override
+ public void destroy() throws Exception {
+ this.destroyMethods.add("DisposableBean.destroy");
+ }
+ }
+
+
+ static class CustomInitDestroyBean {
+
+ final List initMethods = new ArrayList<>();
+ final List destroyMethods = new ArrayList<>();
+
+ public void customInit() throws Exception {
+ this.initMethods.add("customInit");
+ }
+
+ public void customDestroy() throws Exception {
+ this.destroyMethods.add("customDestroy");
+ }
+ }
+
+ static class CustomAnnotatedPrivateInitDestroyBean extends CustomInitializingDisposableBean {
+
+ @PostConstruct
+ private void customInit1() throws Exception {
+ this.initMethods.add("@PostConstruct.privateCustomInit1");
+ }
+
+ @PreDestroy
+ private void customDestroy1() throws Exception {
+ this.destroyMethods.add("@PreDestroy.privateCustomDestroy1");
+ }
+ }
+
+ static class CustomAnnotatedPrivateSameNameInitDestroyBean extends CustomAnnotatedPrivateInitDestroyBean {
+
+ @PostConstruct
+ @SuppressWarnings("unused")
+ private void customInit1() throws Exception {
+ this.initMethods.add("@PostConstruct.sameNameCustomInit1");
+ }
+
+ @PreDestroy
+ @SuppressWarnings("unused")
+ private void customDestroy1() throws Exception {
+ this.destroyMethods.add("@PreDestroy.sameNameCustomDestroy1");
+ }
+ }
+
+ static class CustomInitializingDisposableBean extends CustomInitDestroyBean
+ implements InitializingBean, DisposableBean {
+
+ @Override
+ public void afterPropertiesSet() throws Exception {
+ this.initMethods.add("afterPropertiesSet");
+ }
+
+ @Override
+ public void destroy() throws Exception {
+ this.destroyMethods.add("destroy");
+ }
+ }
+
+ static class CustomAnnotatedInitDestroyBean extends CustomInitializingDisposableBean {
+
+ @PostConstruct
+ public void postConstruct() throws Exception {
+ this.initMethods.add("postConstruct");
+ }
+
+ @PreDestroy
+ public void preDestroy() throws Exception {
+ this.destroyMethods.add("preDestroy");
+ }
+ }
+
+ static class CustomAnnotatedInitDestroyWithShadowedMethodsBean extends CustomInitializingDisposableBean {
+
+ @PostConstruct
+ @Override
+ public void afterPropertiesSet() throws Exception {
+ this.initMethods.add("@PostConstruct.afterPropertiesSet");
+ }
+
+ @PreDestroy
+ @Override
+ public void destroy() throws Exception {
+ this.destroyMethods.add("@PreDestroy.destroy");
+ }
+ }
+
+ static class AllInOneBean implements InitializingBean, DisposableBean {
+
+ final List initMethods = new ArrayList<>();
+ final List destroyMethods = new ArrayList<>();
+
+ @PostConstruct
+ @Override
+ public void afterPropertiesSet() throws Exception {
+ this.initMethods.add("afterPropertiesSet");
+ }
+
+ @PreDestroy
+ @Override
+ public void destroy() throws Exception {
+ this.destroyMethods.add("destroy");
+ }
+ }
+
+}
diff --git a/spring-context/src/test/java/org/springframework/context/annotation/Spr3775InitDestroyLifecycleTests.java b/spring-context/src/test/java/org/springframework/context/annotation/Spr3775InitDestroyLifecycleTests.java
deleted file mode 100644
index 4de6652e65a3..000000000000
--- a/spring-context/src/test/java/org/springframework/context/annotation/Spr3775InitDestroyLifecycleTests.java
+++ /dev/null
@@ -1,325 +0,0 @@
-/*
- * Copyright 2002-2022 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.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.context.annotation;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.junit.jupiter.api.Test;
-
-import org.springframework.beans.factory.DisposableBean;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.support.DefaultListableBeanFactory;
-import org.springframework.beans.factory.support.RootBeanDefinition;
-import org.springframework.util.ObjectUtils;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-/**
- *
- * JUnit-3.8-based unit test which verifies expected init and
- * destroy bean lifecycle behavior as requested in SPR-3775.
- *
- *
- * Specifically, combinations of the following are tested:
- *
- *
- * - {@link InitializingBean} & {@link DisposableBean} interfaces
- * - Custom {@link RootBeanDefinition#getInitMethodName() init} &
- * {@link RootBeanDefinition#getDestroyMethodName() destroy} methods
- * - JSR 250's {@link javax.annotation.PostConstruct @PostConstruct} &
- * {@link javax.annotation.PreDestroy @PreDestroy} annotations
- *
- *
- * @author Sam Brannen
- * @since 2.5
- */
-public class Spr3775InitDestroyLifecycleTests {
-
- private static final Log logger = LogFactory.getLog(Spr3775InitDestroyLifecycleTests.class);
-
- /** LIFECYCLE_TEST_BEAN. */
- private static final String LIFECYCLE_TEST_BEAN = "lifecycleTestBean";
-
-
- private void debugMethods(Class> clazz, String category, List methodNames) {
- if (logger.isDebugEnabled()) {
- logger.debug(clazz.getSimpleName() + ": " + category + ": " + methodNames);
- }
- }
-
- private void assertMethodOrdering(Class> clazz, String category, List expectedMethods,
- List actualMethods) {
- debugMethods(clazz, category, actualMethods);
- assertThat(ObjectUtils.nullSafeEquals(expectedMethods, actualMethods)).as("Verifying " + category + ": expected<" + expectedMethods + "> but got<" + actualMethods + ">.").isTrue();
- }
-
- private DefaultListableBeanFactory createBeanFactoryAndRegisterBean(final Class> beanClass,
- final String initMethodName, final String destroyMethodName) {
- DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
- RootBeanDefinition beanDefinition = new RootBeanDefinition(beanClass);
- beanDefinition.setInitMethodName(initMethodName);
- beanDefinition.setDestroyMethodName(destroyMethodName);
- beanFactory.addBeanPostProcessor(new CommonAnnotationBeanPostProcessor());
- beanFactory.registerBeanDefinition(LIFECYCLE_TEST_BEAN, beanDefinition);
- return beanFactory;
- }
-
- @Test
- public void testInitDestroyMethods() {
- final Class> beanClass = InitDestroyBean.class;
- final DefaultListableBeanFactory beanFactory = createBeanFactoryAndRegisterBean(beanClass,
- "afterPropertiesSet", "destroy");
- final InitDestroyBean bean = (InitDestroyBean) beanFactory.getBean(LIFECYCLE_TEST_BEAN);
- assertMethodOrdering(beanClass, "init-methods", Arrays.asList("afterPropertiesSet"), bean.initMethods);
- beanFactory.destroySingletons();
- assertMethodOrdering(beanClass, "destroy-methods", Arrays.asList("destroy"), bean.destroyMethods);
- }
-
- @Test
- public void testInitializingDisposableInterfaces() {
- final Class> beanClass = CustomInitializingDisposableBean.class;
- final DefaultListableBeanFactory beanFactory = createBeanFactoryAndRegisterBean(beanClass, "customInit",
- "customDestroy");
- final CustomInitializingDisposableBean bean = (CustomInitializingDisposableBean) beanFactory.getBean(LIFECYCLE_TEST_BEAN);
- assertMethodOrdering(beanClass, "init-methods", Arrays.asList("afterPropertiesSet", "customInit"),
- bean.initMethods);
- beanFactory.destroySingletons();
- assertMethodOrdering(beanClass, "destroy-methods", Arrays.asList("destroy", "customDestroy"),
- bean.destroyMethods);
- }
-
- @Test
- public void testInitializingDisposableInterfacesWithShadowedMethods() {
- final Class> beanClass = InitializingDisposableWithShadowedMethodsBean.class;
- final DefaultListableBeanFactory beanFactory = createBeanFactoryAndRegisterBean(beanClass,
- "afterPropertiesSet", "destroy");
- final InitializingDisposableWithShadowedMethodsBean bean = (InitializingDisposableWithShadowedMethodsBean) beanFactory.getBean(LIFECYCLE_TEST_BEAN);
- assertMethodOrdering(beanClass, "init-methods", Arrays.asList("InitializingBean.afterPropertiesSet"),
- bean.initMethods);
- beanFactory.destroySingletons();
- assertMethodOrdering(beanClass, "destroy-methods", Arrays.asList("DisposableBean.destroy"), bean.destroyMethods);
- }
-
- @Test
- public void testJsr250Annotations() {
- final Class> beanClass = CustomAnnotatedInitDestroyBean.class;
- final DefaultListableBeanFactory beanFactory = createBeanFactoryAndRegisterBean(beanClass, "customInit",
- "customDestroy");
- final CustomAnnotatedInitDestroyBean bean = (CustomAnnotatedInitDestroyBean) beanFactory.getBean(LIFECYCLE_TEST_BEAN);
- assertMethodOrdering(beanClass, "init-methods", Arrays.asList("postConstruct", "afterPropertiesSet",
- "customInit"), bean.initMethods);
- beanFactory.destroySingletons();
- assertMethodOrdering(beanClass, "destroy-methods", Arrays.asList("preDestroy", "destroy", "customDestroy"),
- bean.destroyMethods);
- }
-
- @Test
- public void testJsr250AnnotationsWithShadowedMethods() {
- final Class> beanClass = CustomAnnotatedInitDestroyWithShadowedMethodsBean.class;
- final DefaultListableBeanFactory beanFactory = createBeanFactoryAndRegisterBean(beanClass, "customInit",
- "customDestroy");
- final CustomAnnotatedInitDestroyWithShadowedMethodsBean bean = (CustomAnnotatedInitDestroyWithShadowedMethodsBean) beanFactory.getBean(LIFECYCLE_TEST_BEAN);
- assertMethodOrdering(beanClass, "init-methods",
- Arrays.asList("@PostConstruct.afterPropertiesSet", "customInit"), bean.initMethods);
- beanFactory.destroySingletons();
- assertMethodOrdering(beanClass, "destroy-methods", Arrays.asList("@PreDestroy.destroy", "customDestroy"),
- bean.destroyMethods);
- }
-
- @Test
- public void testJsr250AnnotationsWithCustomPrivateInitDestroyMethods() {
- Class> beanClass = CustomAnnotatedPrivateInitDestroyBean.class;
- DefaultListableBeanFactory beanFactory = createBeanFactoryAndRegisterBean(beanClass, "customInit1", "customDestroy1");
- CustomAnnotatedPrivateInitDestroyBean bean =
- (CustomAnnotatedPrivateInitDestroyBean) beanFactory.getBean(LIFECYCLE_TEST_BEAN);
- assertMethodOrdering(beanClass, "init-methods", Arrays.asList("@PostConstruct.privateCustomInit1", "afterPropertiesSet"), bean.initMethods);
- beanFactory.destroySingletons();
- assertMethodOrdering(beanClass, "destroy-methods", Arrays.asList("@PreDestroy.privateCustomDestroy1", "destroy"), bean.destroyMethods);
- }
-
- @Test
- public void testJsr250AnnotationsWithCustomSameMethodNames() {
- Class> beanClass = CustomAnnotatedPrivateSameNameInitDestroyBean.class;
- DefaultListableBeanFactory beanFactory = createBeanFactoryAndRegisterBean(beanClass, "customInit1", "customDestroy1");
- CustomAnnotatedPrivateSameNameInitDestroyBean bean =
- (CustomAnnotatedPrivateSameNameInitDestroyBean) beanFactory.getBean(LIFECYCLE_TEST_BEAN);
- assertMethodOrdering(beanClass, "init-methods",
- Arrays.asList("@PostConstruct.privateCustomInit1", "@PostConstruct.sameNameCustomInit1", "afterPropertiesSet"), bean.initMethods);
- beanFactory.destroySingletons();
- assertMethodOrdering(beanClass, "destroy-methods",
- Arrays.asList("@PreDestroy.sameNameCustomDestroy1", "@PreDestroy.privateCustomDestroy1", "destroy"), bean.destroyMethods);
- }
-
- @Test
- public void testAllLifecycleMechanismsAtOnce() {
- final Class> beanClass = AllInOneBean.class;
- final DefaultListableBeanFactory beanFactory = createBeanFactoryAndRegisterBean(beanClass,
- "afterPropertiesSet", "destroy");
- final AllInOneBean bean = (AllInOneBean) beanFactory.getBean(LIFECYCLE_TEST_BEAN);
- assertMethodOrdering(beanClass, "init-methods", Arrays.asList("afterPropertiesSet"), bean.initMethods);
- beanFactory.destroySingletons();
- assertMethodOrdering(beanClass, "destroy-methods", Arrays.asList("destroy"), bean.destroyMethods);
- }
-
-
- public static class InitDestroyBean {
-
- final List initMethods = new ArrayList<>();
- final List destroyMethods = new ArrayList<>();
-
-
- public void afterPropertiesSet() throws Exception {
- this.initMethods.add("afterPropertiesSet");
- }
-
- public void destroy() throws Exception {
- this.destroyMethods.add("destroy");
- }
- }
-
- public static class InitializingDisposableWithShadowedMethodsBean extends InitDestroyBean implements
- InitializingBean, DisposableBean {
-
- @Override
- public void afterPropertiesSet() throws Exception {
- this.initMethods.add("InitializingBean.afterPropertiesSet");
- }
-
- @Override
- public void destroy() throws Exception {
- this.destroyMethods.add("DisposableBean.destroy");
- }
- }
-
-
- public static class CustomInitDestroyBean {
-
- final List initMethods = new ArrayList<>();
- final List destroyMethods = new ArrayList<>();
-
- public void customInit() throws Exception {
- this.initMethods.add("customInit");
- }
-
- public void customDestroy() throws Exception {
- this.destroyMethods.add("customDestroy");
- }
- }
-
- public static class CustomAnnotatedPrivateInitDestroyBean extends CustomInitializingDisposableBean {
-
- @PostConstruct
- private void customInit1() throws Exception {
- this.initMethods.add("@PostConstruct.privateCustomInit1");
- }
-
- @PreDestroy
- private void customDestroy1() throws Exception {
- this.destroyMethods.add("@PreDestroy.privateCustomDestroy1");
- }
-
- }
-
- public static class CustomAnnotatedPrivateSameNameInitDestroyBean extends CustomAnnotatedPrivateInitDestroyBean {
-
- @PostConstruct
- @SuppressWarnings("unused")
- private void customInit1() throws Exception {
- this.initMethods.add("@PostConstruct.sameNameCustomInit1");
- }
-
- @PreDestroy
- @SuppressWarnings("unused")
- private void customDestroy1() throws Exception {
- this.destroyMethods.add("@PreDestroy.sameNameCustomDestroy1");
- }
-
- }
-
- public static class CustomInitializingDisposableBean extends CustomInitDestroyBean
- implements InitializingBean, DisposableBean {
-
- @Override
- public void afterPropertiesSet() throws Exception {
- this.initMethods.add("afterPropertiesSet");
- }
-
- @Override
- public void destroy() throws Exception {
- this.destroyMethods.add("destroy");
- }
- }
-
-
- public static class CustomAnnotatedInitDestroyBean extends CustomInitializingDisposableBean {
-
- @PostConstruct
- public void postConstruct() throws Exception {
- this.initMethods.add("postConstruct");
- }
-
- @PreDestroy
- public void preDestroy() throws Exception {
- this.destroyMethods.add("preDestroy");
- }
- }
-
-
- public static class CustomAnnotatedInitDestroyWithShadowedMethodsBean extends CustomInitializingDisposableBean {
-
- @PostConstruct
- @Override
- public void afterPropertiesSet() throws Exception {
- this.initMethods.add("@PostConstruct.afterPropertiesSet");
- }
-
- @PreDestroy
- @Override
- public void destroy() throws Exception {
- this.destroyMethods.add("@PreDestroy.destroy");
- }
- }
-
-
- public static class AllInOneBean implements InitializingBean, DisposableBean {
-
- final List initMethods = new ArrayList<>();
- final List destroyMethods = new ArrayList<>();
-
- @Override
- @PostConstruct
- public void afterPropertiesSet() throws Exception {
- this.initMethods.add("afterPropertiesSet");
- }
-
- @Override
- @PreDestroy
- public void destroy() throws Exception {
- this.destroyMethods.add("destroy");
- }
- }
-
-}