From 14f9dbf70c05d1ee49c246967390bd2981ea878d Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Thu, 10 Apr 2014 22:52:22 +0200 Subject: [PATCH] Consistent documentation for both 'close' and 'shutdown' as inferred destroy methods Issue: SPR-11680 --- .../support/AbstractBeanDefinition.java | 17 ++++++++------ .../context/annotation/Bean.java | 23 ++++++++++--------- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanDefinition.java b/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanDefinition.java index 9815f1689f6..31be0ccf630 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanDefinition.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanDefinition.java @@ -38,8 +38,8 @@ import org.springframework.util.StringUtils; /** * Base class for concrete, full-fledged * {@link org.springframework.beans.factory.config.BeanDefinition} classes, - * factoring out common properties of {@link RootBeanDefinition} and - * {@link ChildBeanDefinition}. + * factoring out common properties of {@link GenericBeanDefinition}, + * {@link RootBeanDefinition} and {@link ChildBeanDefinition}. * *

The autowire constants match the ones defined in the * {@link org.springframework.beans.factory.config.AutowireCapableBeanFactory} @@ -123,11 +123,14 @@ public abstract class AbstractBeanDefinition extends BeanMetadataAttributeAccess public static final int DEPENDENCY_CHECK_ALL = 3; /** - * Constant that indicates the container should attempt to infer the {@link - * #setDestroyMethodName destroy method name} for a bean as opposed to explicit - * specification of a method name. The value {@value} is specifically designed to - * include characters otherwise illegal in a method name, ensuring no possibility of - * collisions with legitimately named methods having the same name. + * Constant that indicates the container should attempt to infer the + * {@link #setDestroyMethodName destroy method name} for a bean as opposed to + * explicit specification of a method name. The value {@value} is specifically + * designed to include characters otherwise illegal in a method name, ensuring + * no possibility of collisions with legitimately named methods having the same + * name. + *

Currently, the method names detected during destroy method inference + * are "close" and "shutdown", if present on the specific bean class. */ public static final String INFER_METHOD = "(inferred)"; diff --git a/spring-context/src/main/java/org/springframework/context/annotation/Bean.java b/spring-context/src/main/java/org/springframework/context/annotation/Bean.java index 679352decf1..5c0fcd6805c 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/Bean.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/Bean.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2013 the original author or authors. + * Copyright 2002-2014 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. @@ -197,25 +197,26 @@ public @interface Bean { /** * The optional name of a method to call on the bean instance during initialization. * Not commonly used, given that the method may be called programmatically directly - * within the body of a Bean-annotated method. Default value is {@code ""}, indicating - * that no init method should be called. + * within the body of a Bean-annotated method. + *

The default value is {@code ""}, indicating no init method to be called. */ String initMethod() default ""; /** * The optional name of a method to call on the bean instance upon closing the - * application context, for example a {@code close()} method on a JDBC {@code - * DataSource} implementation, or a Hibernate {@code SessionFactory} object. + * application context, for example a {@code close()} method on a JDBC + * {@code DataSource} implementation, or a Hibernate {@code SessionFactory} object. * The method must have no arguments but may throw any exception. *

As a convenience to the user, the container will attempt to infer a destroy - * method against an object returned from the {@code @Bean} method. For example, given a - * {@code @Bean} method returning an Apache Commons DBCP {@code BasicDataSource}, the - * container will notice the {@code close()} method available on that object and + * method against an object returned from the {@code @Bean} method. For example, given + * an {@code @Bean} method returning an Apache Commons DBCP {@code BasicDataSource}, + * the container will notice the {@code close()} method available on that object and * automatically register it as the {@code destroyMethod}. This 'destroy method * inference' is currently limited to detecting only public, no-arg methods named - * 'close'. The method may be declared at any level of the inheritance hierarchy and - * will be detected regardless of the return type of the {@code @Bean} method (i.e., - * detection occurs reflectively against the bean instance itself at creation time). + * 'close' or 'shutdown'. The method may be declared at any level of the inheritance + * hierarchy and will be detected regardless of the return type of the {@code @Bean} + * method (i.e., detection occurs reflectively against the bean instance itself at + * creation time). *

To disable destroy method inference for a particular {@code @Bean}, specify an * empty string as the value, e.g. {@code @Bean(destroyMethod="")}. Note that the * {@link org.springframework.beans.factory.DisposableBean} and the