Merge branch '5.1.x'
This commit is contained in:
@@ -4538,15 +4538,19 @@ e.g. declared as a single public constructor without an `@Autowired` annotation.
|
||||
|
||||
[NOTE]
|
||||
====
|
||||
Only one annotated constructor per class can be marked as required, but multiple
|
||||
non-required constructors can be annotated. In that case, each is considered among
|
||||
the candidates and Spring uses the greediest constructor whose dependencies can be
|
||||
satisfied -- that is, the constructor that has the largest number of arguments.
|
||||
The constructor resolution algorithm is the same as for non-annotated classes with
|
||||
overloaded constructors, just narrowing the candidates to annotated constructors.
|
||||
Only one constructor of any given bean class may declare `@Autowired` with the `required`
|
||||
attribute set to `true`, indicating _the_ constructor to autowire when used as a Spring
|
||||
bean. Furthermore, if the `required` attribute is set to `true`, only a single
|
||||
constructor may be annotated with `@Autowired`. 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.
|
||||
|
||||
The 'required' attribute of `@Autowired` is recommended over the `@Required` annotation
|
||||
on setter methods. The 'required' attribute indicates that the property is not required
|
||||
The `required` attribute of `@Autowired` is recommended over the `@Required` annotation
|
||||
on setter methods. The `required` attribute indicates that the property is not required
|
||||
for autowiring purposes. The property is ignored if it cannot be autowired. `@Required`,
|
||||
on the other hand, is stronger in that it enforces the property to be set by any means
|
||||
supported by the container. If no value is defined, a corresponding exception is raised.
|
||||
|
||||
Reference in New Issue
Block a user