diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/Aware.java b/spring-beans/src/main/java/org/springframework/beans/factory/Aware.java index f993f1f7135..8423a458e16 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/Aware.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/Aware.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2011 the original author or authors. + * Copyright 2002-2018 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. @@ -17,21 +17,19 @@ package org.springframework.beans.factory; /** - * Marker superinterface indicating that a bean is eligible to be - * notified by the Spring container of a particular framework object - * through a callback-style method. Actual method signature is - * determined by individual subinterfaces, but should typically - * consist of just one void-returning method that accepts a single - * argument. + * A marker superinterface indicating that a bean is eligible to be notified by the + * Spring container of a particular framework object through a callback-style method. + * The actual method signature is determined by individual subinterfaces but should + * typically consist of just one void-returning method that accepts a single argument. * - *
Note that merely implementing {@link Aware} provides no default - * functionality. Rather, processing must be done explicitly, for example - * in a {@link org.springframework.beans.factory.config.BeanPostProcessor BeanPostProcessor}. + *
Note that merely implementing {@link Aware} provides no default functionality. + * Rather, processing must be done explicitly, for example in a + * {@link org.springframework.beans.factory.config.BeanPostProcessor}. * Refer to {@link org.springframework.context.support.ApplicationContextAwareProcessor} - * and {@link org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory} - * for examples of processing {@code *Aware} interface callbacks. + * for an example of processing specific {@code *Aware} interface callbacks. * * @author Chris Beams + * @author Juergen Hoeller * @since 3.1 */ public interface Aware { diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/annotation/Autowired.java b/spring-beans/src/main/java/org/springframework/beans/factory/annotation/Autowired.java index cfc5d9d4c41..05a9b2eae64 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/annotation/Autowired.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/annotation/Autowired.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2017 the original author or authors. + * Copyright 2002-2018 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. @@ -23,15 +23,22 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** - * Marks a constructor, field, setter method or config method as to be autowired - * by Spring's dependency injection facilities. + * Marks a constructor, field, setter method or config method as to be autowired by + * Spring's dependency injection facilities. This is an alternative to the JSR-330 + * {@link javax.inject.Inject} annotation, adding required-vs-optional semantics. * - *
Only one constructor (at max) of any given bean class may carry this annotation, - * indicating the constructor to autowire when used as a Spring bean. Such a - * constructor does not have to be public. + *
Only one constructor (at max) of any given bean class may declare this annotation + * with the 'required' parameter set to {@code true}, indicating the constructor + * to autowire when used as a Spring bean. If multiple non-required constructors + * declare the annotation, they will be considered as candidates for autowiring. + * The constructor with the greatest number of dependencies that can be satisfied by + * matching beans in the Spring container will be chosen. If none of the candidates + * can be satisfied, then a primary/default constructor (if present) will be used. + * If a class only declares a single constructor to begin with, it will always be used, + * even if not annotated. An annotated constructor does not have to be public. * - *
Fields are injected right after construction of a bean, before any config - * methods are invoked. Such a config field does not have to be public. + *
Fields are injected right after construction of a bean, before any config methods + * are invoked. Such a config field does not have to be public. * *
Config methods may have an arbitrary name and any number of arguments; each of * those arguments will be autowired with a matching bean in the Spring container. diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/annotation/AutowiredAnnotationBeanPostProcessor.java b/spring-beans/src/main/java/org/springframework/beans/factory/annotation/AutowiredAnnotationBeanPostProcessor.java index c43ce982d2c..2ec5eb4dc8f 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/annotation/AutowiredAnnotationBeanPostProcessor.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/annotation/AutowiredAnnotationBeanPostProcessor.java @@ -74,15 +74,15 @@ import org.springframework.util.StringUtils; *
Also supports JSR-330's {@link javax.inject.Inject @Inject} annotation, * if available, as a direct alternative to Spring's own {@code @Autowired}. * - *
Only one constructor (at max) of any given bean class may carry this - * annotation with the 'required' parameter set to {@code true}, - * indicating the constructor to autowire when used as a Spring bean. - * If multiple non-required constructors carry the annotation, they - * will be considered as candidates for autowiring. The constructor with - * the greatest number of dependencies that can be satisfied by matching - * beans in the Spring container will be chosen. If none of the candidates - * can be satisfied, then a default constructor (if present) will be used. - * An annotated constructor does not have to be public. + *
Only one constructor (at max) of any given bean class may declare this annotation + * with the 'required' parameter set to {@code true}, indicating the constructor + * to autowire when used as a Spring bean. If multiple non-required constructors + * declare the annotation, they will be considered as candidates for autowiring. + * The constructor with the greatest number of dependencies that can be satisfied by + * matching beans in the Spring container will be chosen. If none of the candidates + * can be satisfied, then a primary/default constructor (if present) will be used. + * If a class only declares a single constructor to begin with, it will always be used, + * even if not annotated. An annotated constructor does not have to be public. * *
Fields are injected right after construction of a bean, before any * config methods are invoked. Such a config field does not have to be public. @@ -161,11 +161,11 @@ public class AutowiredAnnotationBeanPostProcessor extends InstantiationAwareBean /** * Set the 'autowired' annotation type, to be used on constructors, fields, * setter methods and arbitrary config methods. - *
The default autowired annotation type is the Spring-provided - * {@link Autowired} annotation, as well as {@link Value}. + *
The default autowired annotation type is the Spring-provided {@link Autowired} + * annotation, as well as {@link Value}. *
This setter property exists so that developers can provide their own - * (non-Spring-specific) annotation type to indicate that a member is - * supposed to be autowired. + * (non-Spring-specific) annotation type to indicate that a member is supposed + * to be autowired. */ public void setAutowiredAnnotationType(Class extends Annotation> autowiredAnnotationType) { Assert.notNull(autowiredAnnotationType, "'autowiredAnnotationType' must not be null"); @@ -176,11 +176,11 @@ public class AutowiredAnnotationBeanPostProcessor extends InstantiationAwareBean /** * Set the 'autowired' annotation types, to be used on constructors, fields, * setter methods and arbitrary config methods. - *
The default autowired annotation type is the Spring-provided - * {@link Autowired} annotation, as well as {@link Value}. + *
The default autowired annotation type is the Spring-provided {@link Autowired} + * annotation, as well as {@link Value}. *
This setter property exists so that developers can provide their own
- * (non-Spring-specific) annotation types to indicate that a member is
- * supposed to be autowired.
+ * (non-Spring-specific) annotation types to indicate that a member is supposed
+ * to be autowired.
*/
public void setAutowiredAnnotationTypes(Set For example if using 'required=true' (the default),
- * this value should be {@code true}; but if using
- * 'optional=false', this value should be {@code false}.
+ * For example if using 'required=true' (the default), this value should be
+ * {@code true}; but if using 'optional=false', this value should be {@code false}.
* @see #setRequiredParameterName(String)
*/
public void setRequiredParameterValue(boolean requiredParameterValue) {