在bean上使用`close()`或`shutdown()`方法设置`destroyMethod`

时间:2017-11-09 10:11:20

标签: java spring

我不确定如何理解: destroyMethod类型的Bean方法。

它说:

  

为方便用户,容器将尝试针对从@Bean方法返回的对象推断出destroy方法。例如,给定一个返回Apache Commons DBCP BasicDataSource的@Bean方法,容器将注意到该对象上可用的close()方法并自动将其注册为destroyMethod。这种“破坏方法推理”目前仅限于检测名为“close”或“shutdown”的公共,非arg方法。

对于具有Bean({destroyMethod="close"})方法的类型close()和具有Bean({destroyMethod="shutdown"})方法的类型shutdown(),是否意味着destroyMethod="close"是多余的,因为它们将始终自动推断?

如果是这样的话,那么destroyMethod="shutdown"display: table-cell;的使用在所有情况下都是多余的。我是对的吗?

1 个答案:

答案 0 :(得分:2)

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

private static final String CLOSE_METHOD_NAME = "close";

private static final String SHUTDOWN_METHOD_NAME = "shutdown";

#hasDestroyMethod

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));
        }
        ...
    }

如果您有兴趣,可以浏览框架的该区域。