Spring Framework's dependency injection internals — specifically from the process where Spring tries to resolve a candidate bean to inject into a dependency marked with @Autowired.
Here's a breakdown of what this line does:
✅ Context
-
descriptor: an instance ofDependencyDescriptor, representing the injection point (e.g. a field or constructor parameter that needs a bean). -
resolveCandidate(...): a method that attempts to find a suitable bean in the application context to satisfy the injection point. -
autowiredBeanName: the name of the bean to be injected, if known. -
type: the required type of the bean to inject (e.g.,MyService.class). -
this: the currentBeanFactory(likely aDefaultListableBeanFactory) used to resolve the dependency.
🔍 What Happens in resolveCandidate(...)
This method:
-
Checks the type of bean required.
-
Looks in the application context for a bean with a matching type and name.
-
If multiple beans match, Spring applies priority annotations like
@Primaryor@Qualifier. -
If a match is found, it returns the actual bean instance (or a reference to it).
🛠 Example
Let's say you have:
@Autowired private MyService myService;
Spring creates a DependencyDescriptor for that field. During bean creation, it tries to resolve it like:
Object instanceCandidate = descriptor.resolveCandidate("myService", MyService.class, beanFactory);
If a matching MyService bean is found, instanceCandidate will be assigned that bean.
🧠 Common Issues
-
NoSuchBeanDefinitionException: if no matching bean is found.
-
NoUniqueBeanDefinitionException: if multiple candidates are found without disambiguation (
@Primary,@Qualifier, etc). -
CircularDependencyException: if the candidate depends on the bean currently being created.
If you're debugging or customizing Spring DI behavior, this method is key to understanding how dependencies get resolved.
846

被折叠的 条评论
为什么被折叠?



