-
Notifications
You must be signed in to change notification settings - Fork 39
io microsphere spring config CollectingConfigurationPropertyListener
Type: Class | Module: microsphere-spring-context | Package: io.microsphere.spring.config | Since: 1.0.0
A listener implementation that collects and manages configuration properties during property resolution and autowiring processes.
CollectingConfigurationPropertyListener integrates with Spring's property resolution and autowire candidate resolving mechanisms to:
- Capture configuration properties as they are resolved by a `ConfigurablePropertyResolver`
- Track metadata such as the property name, target type, value, default value, and whether it's required
- Register itself as a Spring bean for integration into the application context lifecycle
When a property is resolved via a ConfigurablePropertyResolver, this listener records its details:
{@code
### Declaration
```java
public class CollectingConfigurationPropertyListener implements PropertyResolverListener, AutowireCandidateResolvingListener,
```
**Author:** Mercy
## Version Information
- **Introduced in:** `1.0.0`
- **Current Project Version:** `0.2.36-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
### Example 1
```java
@Component
public class MyPropertyResolverListener implements PropertyResolverListener {
@Override
public void afterGetProperty(ConfigurablePropertyResolver resolver, String name, Class> targetType, Object value, Object defaultValue) {
System.out.println("Captured property: " + name);
System.out.println("Target type: " + targetType.getName());
System.out.println("Value: " + value);
System.out.println("Default Value: " + defaultValue);
}
}
```
### Example 2
```java
@Component
public class MyAutowireCandidateResolvingListener implements AutowireCandidateResolvingListener {
@Override
public void suggestedValueResolved(DependencyDescriptor descriptor, Object suggestedValue) {
System.out.println("Suggested value for dependency " + descriptor + ": " + suggestedValue);
}
@Override
public void lazyProxyResolved(DependencyDescriptor descriptor, String beanName, Object proxy) {
System.out.println("Lazy proxy created for " + descriptor + " in bean " + beanName);
}
}
```
### Example 3
```java
BeanDefinitionRegistry registry = ...;
registerBean(registry, CollectingConfigurationPropertyListener.BEAN_NAME, new CollectingConfigurationPropertyListener());
```
### Method Examples
#### `afterGetProperty`
```java
// Triggered automatically when resolving a property:
String value = environment.getProperty("test-name");
// After resolution, the listener records the property details:
ConfigurationProperty property = repository.get("test-name");
assertEquals("test-value", property.getValue());
assertEquals(String.class.getName(), property.getType());
```
#### `afterGetRequiredProperty`
```java
// Triggered automatically when resolving a required property:
String value = environment.getRequiredProperty("test-name");
// After resolution, the listener records the property as required:
ConfigurationProperty property = repository.get("test-name");
assertEquals("test-value", property.getValue());
assertTrue(property.isRequired());
```
#### `afterSetPlaceholderPrefix`
```java
// Change the placeholder prefix on the environment:
environment.setPlaceholderPrefix("#(");
// The listener tracks the updated prefix:
assertEquals("#(", listener.getPlaceholderPrefix());
```
#### `afterSetPlaceholderSuffix`
```java
// Change the placeholder suffix on the environment:
environment.setPlaceholderSuffix(")");
// The listener tracks the updated suffix:
assertEquals(")", listener.getPlaceholderSuffix());
```
#### `setBeanFactory`
```java
// Typically invoked automatically by Spring during context initialization:
CollectingConfigurationPropertyListener listener = new CollectingConfigurationPropertyListener();
listener.setBeanFactory(beanFactory);
// After setBeanFactory, the ConfigurationPropertyRepository is registered:
assertTrue(beanFactory.containsBean(ConfigurationPropertyRepository.BEAN_NAME));
```
#### `getPlaceholderPrefix`
```java
CollectingConfigurationPropertyListener listener = ...; // obtained from Spring context
String prefix = listener.getPlaceholderPrefix();
assertEquals("${", prefix);
```
#### `getPlaceholderSuffix`
```java
CollectingConfigurationPropertyListener listener = ...; // obtained from Spring context
String suffix = listener.getPlaceholderSuffix();
assertEquals("}", suffix);
```
## Usage
### Maven Dependency
Add the following dependency to your `pom.xml`:
```xml
io.github.microsphere-projects
microsphere-spring-context
${microsphere-spring.version}
```
> **Tip:** Use the BOM (`microsphere-spring-dependencies`) for consistent version management. See the [Getting Started](https://github.com/microsphere-projects/microsphere-spring#getting-started) guide.
### Import
```java
import io.microsphere.spring.config.CollectingConfigurationPropertyListener;
```
## API Reference
### Public Methods
| Method | Description |
|--------|-------------|
| `afterGetProperty` | Invoked after a property is retrieved from the `ConfigurablePropertyResolver`. |
| `afterGetRequiredProperty` | Invoked after a required property is retrieved from the `ConfigurablePropertyResolver`. |
| `afterSetPlaceholderPrefix` | Invoked after the placeholder prefix is changed on the `ConfigurablePropertyResolver`. |
| `afterSetPlaceholderSuffix` | Invoked after the placeholder suffix is changed on the `ConfigurablePropertyResolver`. |
| `setBeanFactory` | Sets the `BeanFactory` and registers the `ConfigurationPropertyRepository` bean definition |
| `getPlaceholderPrefix` | Returns the current placeholder prefix used for property resolution. |
| `getPlaceholderSuffix` | Returns the current placeholder suffix used for property resolution. |
### Method Details
#### `afterGetProperty`
```java
public void afterGetProperty(ConfigurablePropertyResolver propertyResolver, String name, Class> targetType,
Object value, Object defaultValue)
```
Invoked after a property is retrieved from the `ConfigurablePropertyResolver`.
Records the property's target type, resolved value, and default value in the
`ConfigurationPropertyRepository`.
### Example Usage
`// Triggered automatically when resolving a property:
String value = environment.getProperty("test-name");
// After resolution, the listener records the property details:
ConfigurationProperty property = repository.get("test-name");
assertEquals("test-value", property.getValue());
assertEquals(String.class.getName(), property.getType());
`
public void afterGetRequiredProperty(ConfigurablePropertyResolver propertyResolver, String name, Class<?> targetType,
Object value)
Invoked after a required property is retrieved from the ConfigurablePropertyResolver.
Records the property's target type and resolved value, and marks it as required in the
ConfigurationPropertyRepository.
`// Triggered automatically when resolving a required property:
String value = environment.getRequiredProperty("test-name");
// After resolution, the listener records the property as required:
ConfigurationProperty property = repository.get("test-name");
assertEquals("test-value", property.getValue());
assertTrue(property.isRequired());
`
public void afterSetPlaceholderPrefix(ConfigurablePropertyResolver propertyResolver, String prefix)
Invoked after the placeholder prefix is changed on the ConfigurablePropertyResolver.
Updates the internally tracked placeholder prefix.
`// Change the placeholder prefix on the environment:
environment.setPlaceholderPrefix("#(");
// The listener tracks the updated prefix:
assertEquals("#(", listener.getPlaceholderPrefix());
`
public void afterSetPlaceholderSuffix(ConfigurablePropertyResolver propertyResolver, String suffix)
Invoked after the placeholder suffix is changed on the ConfigurablePropertyResolver.
Updates the internally tracked placeholder suffix.
`// Change the placeholder suffix on the environment:
environment.setPlaceholderSuffix(")");
// The listener tracks the updated suffix:
assertEquals(")", listener.getPlaceholderSuffix());
`
public void setBeanFactory(BeanFactory beanFactory)
Sets the BeanFactory and registers the ConfigurationPropertyRepository bean definition
as well as this listener as a named bean in the BeanDefinitionRegistry.
`// Typically invoked automatically by Spring during context initialization:
CollectingConfigurationPropertyListener listener = new CollectingConfigurationPropertyListener();
listener.setBeanFactory(beanFactory);
// After setBeanFactory, the ConfigurationPropertyRepository is registered:
assertTrue(beanFactory.containsBean(ConfigurationPropertyRepository.BEAN_NAME));
`
public String getPlaceholderPrefix()
Returns the current placeholder prefix used for property resolution.
Defaults to "${" unless changed via
#afterSetPlaceholderPrefix(ConfigurablePropertyResolver, String).
`CollectingConfigurationPropertyListener listener = ...; // obtained from Spring context
String prefix = listener.getPlaceholderPrefix();
assertEquals("${", prefix);
`
public String getPlaceholderSuffix()
Returns the current placeholder suffix used for property resolution.
Defaults to ""} unless changed via
#afterSetPlaceholderSuffix(ConfigurablePropertyResolver, String).
`CollectingConfigurationPropertyListener listener = ...; // obtained from Spring context
String suffix = listener.getPlaceholderSuffix();
assertEquals("`", suffix);
}
PropertyResolverListenerAutowireCandidateResolvingListenerConfigurationPropertyRepositoryConfigurationProperty
This documentation was auto-generated from the source code of microsphere-spring.
spring-context
- AbstractInjectionPointDependencyResolver
- AbstractSmartLifecycle
- AbstractSpringResourceURLConnection
- AnnotatedBeanCapableImportBeanDefinitionRegistrar
- AnnotatedBeanCapableImportCandidate
- AnnotatedBeanCapableImportSelector
- AnnotatedBeanDefinitionRegistryUtils
- AnnotatedInjectionBeanPostProcessor
- AnnotatedInjectionPointDependencyResolver
- AnnotatedPropertySourceLoader
- AnnotationBeanDefinitionRegistryPostProcessor
- AnnotationUtils
- ApplicationContextUtils
- ApplicationEventInterceptor
- ApplicationEventInterceptorChain
- ApplicationListenerInterceptor
- ApplicationListenerInterceptorChain
- AutoRegistrationBean
- AutoRegistrationBeanInitializer
- AutoRegistrationBeanRegistrar
- AutowireCandidateResolvingListener
- AutowiredInjectionPointDependencyResolver
- BeanCapableImportCandidate
- BeanDefinitionUtils
- BeanDependencyResolver
- BeanFactoryListener
- BeanFactoryListenerAdapter
- BeanFactoryListeners
- BeanFactoryUtils
- BeanListener
- BeanListenerAdapter
- BeanListeners
- BeanMethodInjectionPointDependencyResolver
- BeanPropertyChangedEvent
- BeanRegistrar
- BeanSource
- BeanTimeStatistics
- BeanUtils
- CollectingConfigurationPropertyListener
- CompositeAutowireCandidateResolvingListener
- ConfigurableApplicationContextInitializer
- ConfigurationBeanAliasGenerator
- ConfigurationBeanBinder
- ConfigurationBeanBindingPostProcessor
- ConfigurationBeanBindingRegistrar
- ConfigurationBeanBindingsRegister
- ConfigurationBeanCustomizer
- ConfigurationPropertyOverrideAnnotationAttributesStrategy
- ConfigurationPropertyRepository
- ConstructionInjectionPointDependencyResolver
- ConversionServiceResolver
- ConversionServiceUtils
- DefaultApplicationEventInterceptorChain
- DefaultApplicationListenerInterceptorChain
- DefaultBeanDependencyResolver
- DefaultConfigurationBeanAliasGenerator
- DefaultConfigurationBeanBinder
- DefaultPropertiesPropertySource
- DefaultPropertiesPropertySourceLoader
- DefaultPropertiesPropertySources
- DefaultPropertiesPropertySourcesLoader
- DefaultResourceComparator
- DelegatingFactoryBean
- Dependency
- DependencyAnalysisBeanFactoryListener
- DependencyTreeWalker
- EnableAutoRegistrationBean
- EnableConfigurationBeanBinding
- EnableConfigurationBeanBindings
- EnableEventExtension
- EnableSpringConverterAdapter
- EnableSpringConverterAdapterRegistrar
- EnableTTLCaching
- EnvironmentEnabled
- EnvironmentListener
- EnvironmentUtils
- EventExtensionAttributes
- EventExtensionRegistrar
- EventPublishingBeanAfterProcessor
- EventPublishingBeanBeforeProcessor
- EventPublishingBeanInitializer
- ExposingClassPathBeanDefinitionScanner
- FilterMode
- GenericAnnotationAttributes
- GenericApplicationListenerAdapter
- GenericBeanNameGenerator
- GenericBeanPostProcessorAdapter
- HyphenAliasGenerator
- ImmutableMapPropertySource
- ImportOptional
- ImportOptionalSelector
- InjectionPointDependencyResolver
- InjectionPointDependencyResolvers
- InterceptingApplicationEventMulticaster
- InterceptingApplicationEventMulticasterProxy
- InterceptingApplicationListener
- JavaBeansPropertyChangeListenerAdapter
- JoinAliasGenerator
- JsonPropertySource
- JsonPropertySourceFactory
- ListenableAutowireCandidateResolver
- ListenableAutowireCandidateResolverInitializer
- ListenableConfigurableEnvironment
- ListenableConfigurableEnvironmentInitializer
- LoggingAutowireCandidateResolvingListener
- LoggingBeanFactoryListener
- LoggingBeanListener
- LoggingEnvironmentListener
- LoggingSmartLifecycle
- MethodParameterUtils
- MimeTypeUtils
- NamedBeanHolderComparator
- OnceApplicationContextEventListener
- OverrideAnnotationAttributes
- OverrideAnnotationAttributesStrategy
- ParallelPreInstantiationSingletonsBeanFactoryListener
- ProfileListener
- PropertiesUtils
- PropertyConstants
- PropertyResolverListener
- PropertyResolverUtils
- PropertySourceChangedEvent
- PropertySourceExtension
- PropertySourceExtensionAttributes
- PropertySourceExtensionLoader
- PropertySourcesChangedEvent
- PropertySourcesUtils
- PropertyValuesUtils
- ResolvableDependencyTypeFilter
- ResolvablePlaceholderAnnotationAttributes
- ResourceInjectionPointDependencyResolver
- ResourceLoaderUtils
- ResourcePropertySource
- ResourcePropertySourceLoader
- ResourcePropertySources
- ResourcePropertySourcesLoader
- ResourceUtils
- ResourceYamlProcessor
- SpringConverterAdapter
- SpringDelegatingBeanProtocolURLConnectionFactory
- SpringEnvironmentURLConnectionFactory
- SpringFactoriesLoaderUtils
- SpringProfilesURLConnectionAdapter
- SpringPropertySourcesURLConnectionAdapter
- SpringProtocolURLStreamHandler
- SpringResourceURLConnection
- SpringResourceURLConnectionAdapter
- SpringResourceURLConnectionFactory
- SpringSubProtocolURLConnectionFactory
- SpringVersion
- SpringVersionUtils
- TTLCachePut
- TTLCacheResolver
- TTLCacheable
- TTLCachingConfiguration
- TTLContext
- UnderScoreJoinAliasGenerator
- YamlPropertySource
- YamlPropertySourceFactory
spring-guice
spring-jdbc
- CompoundJdbcEventListenerFactory
- EnableP6DataSource
- NoOpP6LoadableOptions
- P6DataSourceBeanDefinitionRegistrar
- P6DataSourceBeanPostProcessor
- PropertySourcesP6LoadableOptionsAdapter
- SpringP6SpyURLConnectionFactory
spring-test
- AbstractWebFluxTest
- AbstractWebMvcTest
- AnnotatedTypeMetadataTestFactory
- EmbeddedDataBaseBeanDefinitionRegistrar
- EmbeddedDataBaseBeanDefinitionsRegistrar
- EmbeddedDatabaseType
- EmbeddedTomcatConfiguration
- EmbeddedTomcatContextLoader
- EmbeddedTomcatMergedContextConfiguration
- EmbeddedTomcatTestContextBootstrapper
- EmbeddedZookeeperServer
- EmbeddedZookeeperServerTestExecutionListener
- EnableEmbeddedDatabase
- EnableEmbeddedDatabases
- MockServletWebRequest
- PersonHandler
- PersonHandler
- RouterFunctionTestConfig
- RouterFunctionTestConfig
- ServletTestUtils
- SimpleUrlHandlerMappingTestConfig
- SimpleUrlHandlerMappingTestConfig
- SpringLoggingTest
- SpringTestUtils
- SpringTestWebUtils
- TestConditionContext
- TestController
- TestFilter
- TestFilterRegistration
- TestServlet
- TestServletContext
- TestServletContextListener
- TestServletRegistration
- User
- WebTestUtils
spring-web
- AbstractNameValueExpression
- AbstractWebEndpointMappingFactory
- AbstractWebRequestRule
- CompositeWebEndpointMappingRegistry
- CompositeWebRequestRule
- ConsumeMediaTypeExpression
- DelegatingHandlerMethodAdvice
- EnableWebExtension
- FilterRegistrationWebEndpointMappingFactory
- FilteringWebEndpointMappingRegistry
- GenericMediaTypeExpression
- HandlerMetadata
- HandlerMethodAdvice
- HandlerMethodArgumentInterceptor
- HandlerMethodArgumentsResolvedEvent
- HandlerMethodInterceptor
- HandlerMethodMetadata
- HttpUtils
- Jackson2WebEndpointMappingFactory
- MediaTypeExpression
- MediaTypeUtils
- NameValueExpression
- ProduceMediaTypeExpression
- PropertyConstants
- RegistrationWebEndpointMappingFactory
- RequestAttributesUtils
- RequestContextStrategy
- ServletRegistrationWebEndpointMappingFactory
- ServletWebEndpointMappingResolver
- SimpleWebEndpointMappingRegistry
- SmartWebEndpointMappingFactory
- SpringWebHelper
- SpringWebType
- UnknownSpringWebHelper
- WebEndpointMapping
- WebEndpointMappingFactory
- WebEndpointMappingFilter
- WebEndpointMappingRegistrar
- WebEndpointMappingRegistry
- WebEndpointMappingResolver
- WebEndpointMappingsReadyEvent
- WebEventPublisher
- WebExtensionBeanDefinitionRegistrar
- WebRequestConsumesRule
- WebRequestHeaderExpression
- WebRequestHeadersRule
- WebRequestMethodsRule
- WebRequestParamExpression
- WebRequestParamsRule
- WebRequestPattensRule
- WebRequestProducesRule
- WebRequestRule
- WebRequestUtils
- WebScope
- WebSource
- WebTarget
- WebType
- WebUtils
spring-webflux
- CompositeWebFilter
- ConsumingWebEndpointMappingAdapter
- DelegatingWebFilter
- EnableWebFluxExtension
- HandlerMappingWebEndpointMappingFactory
- HandlerMappingWebEndpointMappingResolver
- HandlerMetadataWebEndpointMappingFactory
- InterceptingHandlerMethodProcessor
- MonoUtils
- RequestContextWebFilter
- RequestHandledEventPublishingWebFilter
- RequestMappingMetadataWebEndpointMappingFactory
- RequestPredicateKind
- RequestPredicateVisitorAdapter
- ReversedProxyHandlerMapping
- RouterFunctionVisitorAdapter
- ServerRequestHandledEvent
- ServerWebRequest
- SpringWebFluxHelper
- StoringRequestBodyArgumentInterceptor
- StoringResponseBodyReturnValueInterceptor
- WebFluxExtensionBeanDefinitionRegistrar
- WebServerScope
- WebServerUtils
spring-webmvc
- AbstractPageRenderContextHandlerInterceptor
- AnnotatedMethodHandlerInterceptor
- ConfigurableContentNegotiationManagerWebMvcConfigurer
- ConsumingWebEndpointMappingAdapter
- ContentCachingFilter
- EnableWebMvcExtension
- EnableWebMvcExtensionListener
- ExclusiveViewResolverApplicationListener
- HandlerMappingWebEndpointMappingFactory
- HandlerMappingWebEndpointMappingResolver
- HandlerMetadataWebEndpointMappingFactory
- HandlerMethodArgumentResolverAdvice
- InterceptingHandlerMethodProcessor
- LazyCompositeHandlerInterceptor
- LoggingHandlerMethodArgumentResolverAdvice
- LoggingMethodHandlerInterceptor
- LoggingPageRenderContextHandlerInterceptor
- MethodHandlerInterceptor
- PropertyConstants
- RequestBodyAdviceAdapter
- RequestMappingMetadata
- RequestMappingMetadataWebEndpointMappingFactory
- RequestPredicateVisitorAdapter
- ResponseBodyAdviceAdapter
- ReversedProxyHandlerMapping
- RouterFunctionVisitorAdapter
- SpringWebMvcHelper
- StoringRequestBodyArgumentAdvice
- StoringResponseBodyReturnValueAdvice
- ViewResolverUtils
- ViewUtils
- WebMvcExtensionBeanDefinitionRegistrar
- WebMvcExtensionConfiguration
- WebMvcUtils
- WebUtils