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 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> autowiredAnnotationTypes) { Assert.notEmpty(autowiredAnnotationTypes, "'autowiredAnnotationTypes' must not be empty"); @@ -189,8 +189,7 @@ public class AutowiredAnnotationBeanPostProcessor extends InstantiationAwareBean } /** - * Set the name of a parameter of the annotation that specifies - * whether it is required. + * Set the name of a parameter of the annotation that specifies whether it is required. * @see #setRequiredParameterValue(boolean) */ public void setRequiredParameterName(String requiredParameterName) { @@ -199,9 +198,8 @@ public class AutowiredAnnotationBeanPostProcessor extends InstantiationAwareBean /** * Set the boolean value that marks a dependency as required - *

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) {