Java 在使用“close()”或“shutdown()”方法返回类型的bean上设置“destroyMethod”

Java 在使用“close()”或“shutdown()”方法返回类型的bean上设置“destroyMethod”,java,spring,Java,Spring,我不知道如何理解Bean类型的fordestroyMethod方法 它说: 为了方便用户,容器将尝试根据@Bean方法返回的对象推断销毁方法。例如,给定返回Apache Commons DBCP BasicDataSource的@Bean方法,容器将注意到该对象上可用的close()方法,并自动将其注册为destroy方法。此“销毁方法推断”当前仅限于检测名为“close”或“shutdown”的公共、非arg方法 这是否意味着Bean({destromethod=“close”})在具有clo

我不知道如何理解
Bean
类型的for
destroyMethod
方法

它说:

为了方便用户,容器将尝试根据@Bean方法返回的对象推断销毁方法。例如,给定返回Apache Commons DBCP BasicDataSource的@Bean方法,容器将注意到该对象上可用的close()方法,并自动将其注册为destroy方法。此“销毁方法推断”当前仅限于检测名为“close”或“shutdown”的公共、非arg方法

这是否意味着
Bean({destromethod=“close”})
在具有
close()
方法的类型上是多余的,而
Bean({destromethod=“shutdown”})
在具有
shutdown()
方法的类型上是多余的,因为它们总是被自动推断出来的


如果是这种情况,则可以看出在所有情况下使用
destromethod=“close”
destromethod=“shutdown”
都是多余的。我说得对吗?

你完全正确,并且正确理解了文档!如果您想查看证据,请查看:

#hasdroduction方法

public static boolean hasDestroyMethod(Object bean, RootBeanDefinition beanDefinition) {
        ...
        if (AbstractBeanDefinition.INFER_METHOD.equals(destroyMethodName)) {
            return (ClassUtils.hasMethod(bean.getClass(), CLOSE_METHOD_NAME) ||
                    ClassUtils.hasMethod(bean.getClass(), SHUTDOWN_METHOD_NAME));
        }
        ...
    }
如果您感兴趣,可以浏览框架的该区域

public static boolean hasDestroyMethod(Object bean, RootBeanDefinition beanDefinition) {
        ...
        if (AbstractBeanDefinition.INFER_METHOD.equals(destroyMethodName)) {
            return (ClassUtils.hasMethod(bean.getClass(), CLOSE_METHOD_NAME) ||
                    ClassUtils.hasMethod(bean.getClass(), SHUTDOWN_METHOD_NAME));
        }
        ...
    }