Skip to content

io microsphere spring beans factory support ListenableAutowireCandidateResolver

github-actions[bot] edited this page Jun 23, 2026 · 24 revisions

ListenableAutowireCandidateResolver

Type: Class | Module: microsphere-spring-context | Package: io.microsphere.spring.beans.factory.support | Since: 1.0.0

Source: microsphere-spring-context/src/main/java/io/microsphere/spring/beans/factory/support/ListenableAutowireCandidateResolver.java

Overview

A decorator implementation of AutowireCandidateResolver that allows listening to the autowire candidate resolution process via AutowireCandidateResolvingListener.

This class enables enhanced visibility into the Spring dependency resolution mechanism by allowing external listeners to observe and react to events during autowiring. It wraps the original resolver and delegates all calls to it while notifying registered listeners about various resolution stages.

Key Features

- Wraps the existing `AutowireCandidateResolver` in a Spring bean factory
- Supports dynamic registration of resolving listeners based on Spring Beans or Spring Factories
- Provides lifecycle integration through `BeanFactoryPostProcessor`

Configuration

Enable the resolver using property configuration:

`microsphere.spring.listenable-autowire-candidate-resolver.enabled=true
`

Declaration

public class ListenableAutowireCandidateResolver implements AutowireCandidateResolver, BeanFactoryPostProcessor,

Author: Mercy

Version Information

  • Introduced in: 1.0.0
  • Current Project Version: 0.2.32-SNAPSHOT

Version Compatibility

This component is tested and compatible with the following Java versions:

Java Version Status
Java 17 ✅ Compatible
Java 21 ✅ Compatible
Java 25 ✅ Compatible

Examples

microsphere.spring.listenable-autowire-candidate-resolver.enabled=true

Method Examples

addListener

ListenableAutowireCandidateResolver resolver = resolverProvider.getIfAvailable();
  resolver.addListener(new LoggingAutowireCandidateResolvingListener());

addListeners

ListenableAutowireCandidateResolver resolver = resolverProvider.getIfAvailable();
  AutowireCandidateResolvingListener[] listeners = new AutowireCandidateResolvingListener[]{
      new LoggingAutowireCandidateResolvingListener()
  };
  resolver.addListeners(listeners);

addListeners

ListenableAutowireCandidateResolver resolver = resolverProvider.getIfAvailable();
  List<AutowireCandidateResolvingListener> listeners = new ArrayList<>();
  listeners.add(new LoggingAutowireCandidateResolvingListener());
  resolver.addListeners(listeners);

isAutowireCandidate

ListenableAutowireCandidateResolver resolver = resolverProvider.getIfAvailable();
  Field field = findField(MyService.class, "testBean");
  DependencyDescriptor descriptor = new DependencyDescriptor(field, true);
  BeanDefinitionHolder holder = new BeanDefinitionHolder(beanDefinition, "testBean");
  boolean candidate = resolver.isAutowireCandidate(holder, descriptor);

getSuggestedValue

// A listener that captures the resolved suggested value for @Value fields:
  public void suggestedValueResolved(DependencyDescriptor descriptor, Object suggestedValue) {
      if (descriptor.getAnnotation(Value.class) != null && suggestedValue instanceof String) {
          String resolved = environment.resolvePlaceholders((String) suggestedValue);
      }
  }

getLazyResolutionProxyIfNecessary

// An @Lazy-annotated field will trigger lazy proxy creation:
  @Autowired
  @Qualifier("testBean")
  @Lazy
  private TestBean testBean;
  // The resolver returns a proxy that defers actual bean resolution

postProcessBeanFactory

// Typically invoked automatically by Spring during context initialization.
  // After postProcessBeanFactory, the resolver is installed in the bean factory:
  ListenableAutowireCandidateResolver resolver = resolverProvider.getIfAvailable();
  AutowireCandidateResolver actual = beanFactory.getAutowireCandidateResolver();
  assertSame(actual, resolver);

Usage

Maven Dependency

Add the following dependency to your pom.xml:

<dependency>
    <groupId>io.github.microsphere-projects</groupId>
    <artifactId>microsphere-spring-context</artifactId>
    <version>${microsphere-spring.version}</version>
</dependency>

Tip: Use the BOM (microsphere-spring-dependencies) for consistent version management. See the Getting Started guide.

Import

import io.microsphere.spring.beans.factory.support.ListenableAutowireCandidateResolver;

API Reference

Public Methods

Method Description
addListener Adds one or more AutowireCandidateResolvingListener instances to this resolver.
addListeners Adds an array of AutowireCandidateResolvingListener instances to this resolver.
addListeners Adds a list of AutowireCandidateResolvingListener instances to this resolver.
isAutowireCandidate {@inheritDoc}
isRequired {@inheritDoc}
hasQualifier {@inheritDoc}
getSuggestedValue {@inheritDoc}
getLazyResolutionProxyIfNecessary {@inheritDoc}
cloneIfNecessary {@inheritDoc}
postProcessBeanFactory {@inheritDoc}
setBeanName
wrap Wraps AutowireCandidateResolver as the ListenableAutowireCandidateResolver and then register to

Method Details

addListener

public void addListener(AutowireCandidateResolvingListener one, AutowireCandidateResolvingListener... more)

Adds one or more AutowireCandidateResolvingListener instances to this resolver. The first listener is required; additional listeners are optional.

Example Usage

`ListenableAutowireCandidateResolver resolver = resolverProvider.getIfAvailable();
  resolver.addListener(new LoggingAutowireCandidateResolvingListener());
`

addListeners

public void addListeners(AutowireCandidateResolvingListener[] listeners)

Adds an array of AutowireCandidateResolvingListener instances to this resolver.

Example Usage

`ListenableAutowireCandidateResolver resolver = resolverProvider.getIfAvailable();
  AutowireCandidateResolvingListener[] listeners = new AutowireCandidateResolvingListener[]{
      new LoggingAutowireCandidateResolvingListener()
  `;
  resolver.addListeners(listeners);
}

addListeners

public void addListeners(List<AutowireCandidateResolvingListener> listeners)

Adds a list of AutowireCandidateResolvingListener instances to this resolver.

Example Usage

`ListenableAutowireCandidateResolver resolver = resolverProvider.getIfAvailable();
  List listeners = new ArrayList<>();
  listeners.add(new LoggingAutowireCandidateResolvingListener());
  resolver.addListeners(listeners);
`

isAutowireCandidate

public boolean isAutowireCandidate(BeanDefinitionHolder bdHolder, DependencyDescriptor descriptor)

{@inheritDoc}

Delegates to the wrapped AutowireCandidateResolver to determine whether the given bean definition qualifies as an autowire candidate for the specified descriptor.

Example Usage

`ListenableAutowireCandidateResolver resolver = resolverProvider.getIfAvailable();
  Field field = findField(MyService.class, "testBean");
  DependencyDescriptor descriptor = new DependencyDescriptor(field, true);
  BeanDefinitionHolder holder = new BeanDefinitionHolder(beanDefinition, "testBean");
  boolean candidate = resolver.isAutowireCandidate(holder, descriptor);
`

getSuggestedValue

public Object getSuggestedValue(DependencyDescriptor descriptor)

{@inheritDoc}

Delegates to the wrapped AutowireCandidateResolver to obtain the suggested value for the given dependency descriptor, then notifies all registered AutowireCandidateResolvingListener listeners via AutowireCandidateResolvingListener#suggestedValueResolved(DependencyDescriptor, Object).

Example Usage

`// A listener that captures the resolved suggested value for @Value fields:
  public void suggestedValueResolved(DependencyDescriptor descriptor, Object suggestedValue) {
      if (descriptor.getAnnotation(Value.class) != null && suggestedValue instanceof String) {
          String resolved = environment.resolvePlaceholders((String) suggestedValue);
      `
  }
}

getLazyResolutionProxyIfNecessary

public Object getLazyResolutionProxyIfNecessary(DependencyDescriptor descriptor, String beanName)

{@inheritDoc}

Delegates to the wrapped AutowireCandidateResolver to obtain a lazy resolution proxy if needed for the given dependency descriptor, then notifies all registered AutowireCandidateResolvingListener listeners via AutowireCandidateResolvingListener#lazyProxyResolved(DependencyDescriptor, String, Object).

Example Usage

{@code
  // An @Lazy-annotated field will trigger lazy proxy creation:

#### `postProcessBeanFactory`

```java
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)
```

{@inheritDoc}


Wraps the `AutowireCandidateResolver` of the given `ConfigurableListableBeanFactory`
with this listenable resolver during the `BeanFactoryPostProcessor` lifecycle.

### Example Usage
`// Typically invoked automatically by Spring during context initialization.
  // After postProcessBeanFactory, the resolver is installed in the bean factory:
  ListenableAutowireCandidateResolver resolver = resolverProvider.getIfAvailable();
  AutowireCandidateResolver actual = beanFactory.getAutowireCandidateResolver();
  assertSame(actual, resolver);
`

wrap

public void wrap(BeanFactory beanFactory)

Wraps AutowireCandidateResolver as the ListenableAutowireCandidateResolver and then register to the given DefaultListableBeanFactory

See Also

  • AutowireCandidateResolver
  • AutowireCandidateResolvingListener
  • CompositeAutowireCandidateResolvingListener
  • DefaultListableBeanFactory#setAutowireCandidateResolver(AutowireCandidateResolver)
  • BeanFactoryPostProcessor

This documentation was auto-generated from the source code of microsphere-spring.

Home

spring-context

spring-guice

spring-jdbc

spring-test

spring-web

spring-webflux

spring-webmvc

Clone this wiki locally