Polish
This commit is contained in:
parent
7d53c54364
commit
dd3bcc5691
|
@ -47,7 +47,7 @@ import org.springframework.beans.BeansException;
|
||||||
import org.springframework.boot.actuate.endpoint.Sanitizer;
|
import org.springframework.boot.actuate.endpoint.Sanitizer;
|
||||||
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
|
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
|
||||||
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
|
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
|
||||||
import org.springframework.boot.context.properties.ConfigurationBeanFactoryMetaData;
|
import org.springframework.boot.context.properties.ConfigurationBeanFactoryMetadata;
|
||||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
import org.springframework.context.ApplicationContext;
|
import org.springframework.context.ApplicationContext;
|
||||||
import org.springframework.context.ApplicationContextAware;
|
import org.springframework.context.ApplicationContextAware;
|
||||||
|
@ -107,15 +107,15 @@ public class ConfigurationPropertiesReportEndpoint implements ApplicationContext
|
||||||
|
|
||||||
private ContextConfigurationProperties describeConfigurationProperties(
|
private ContextConfigurationProperties describeConfigurationProperties(
|
||||||
ApplicationContext context, ObjectMapper mapper) {
|
ApplicationContext context, ObjectMapper mapper) {
|
||||||
ConfigurationBeanFactoryMetaData beanFactoryMetaData = getBeanFactoryMetaData(
|
ConfigurationBeanFactoryMetadata beanFactoryMetadata = getBeanFactoryMetadata(
|
||||||
context);
|
context);
|
||||||
Map<String, Object> beans = getConfigurationPropertiesBeans(context,
|
Map<String, Object> beans = getConfigurationPropertiesBeans(context,
|
||||||
beanFactoryMetaData);
|
beanFactoryMetadata);
|
||||||
Map<String, ConfigurationPropertiesBeanDescriptor> beanDescriptors = new HashMap<>();
|
Map<String, ConfigurationPropertiesBeanDescriptor> beanDescriptors = new HashMap<>();
|
||||||
for (Map.Entry<String, Object> entry : beans.entrySet()) {
|
for (Map.Entry<String, Object> entry : beans.entrySet()) {
|
||||||
String beanName = entry.getKey();
|
String beanName = entry.getKey();
|
||||||
Object bean = entry.getValue();
|
Object bean = entry.getValue();
|
||||||
String prefix = extractPrefix(context, beanFactoryMetaData, beanName);
|
String prefix = extractPrefix(context, beanFactoryMetadata, beanName);
|
||||||
beanDescriptors.put(beanName, new ConfigurationPropertiesBeanDescriptor(
|
beanDescriptors.put(beanName, new ConfigurationPropertiesBeanDescriptor(
|
||||||
prefix, sanitize(prefix, safeSerialize(mapper, bean, prefix))));
|
prefix, sanitize(prefix, safeSerialize(mapper, bean, prefix))));
|
||||||
}
|
}
|
||||||
|
@ -123,10 +123,10 @@ public class ConfigurationPropertiesReportEndpoint implements ApplicationContext
|
||||||
context.getParent() == null ? null : context.getParent().getId());
|
context.getParent() == null ? null : context.getParent().getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
private ConfigurationBeanFactoryMetaData getBeanFactoryMetaData(
|
private ConfigurationBeanFactoryMetadata getBeanFactoryMetadata(
|
||||||
ApplicationContext context) {
|
ApplicationContext context) {
|
||||||
Map<String, ConfigurationBeanFactoryMetaData> beans = context
|
Map<String, ConfigurationBeanFactoryMetadata> beans = context
|
||||||
.getBeansOfType(ConfigurationBeanFactoryMetaData.class);
|
.getBeansOfType(ConfigurationBeanFactoryMetadata.class);
|
||||||
if (beans.size() == 1) {
|
if (beans.size() == 1) {
|
||||||
return beans.values().iterator().next();
|
return beans.values().iterator().next();
|
||||||
}
|
}
|
||||||
|
@ -135,11 +135,11 @@ public class ConfigurationPropertiesReportEndpoint implements ApplicationContext
|
||||||
|
|
||||||
private Map<String, Object> getConfigurationPropertiesBeans(
|
private Map<String, Object> getConfigurationPropertiesBeans(
|
||||||
ApplicationContext context,
|
ApplicationContext context,
|
||||||
ConfigurationBeanFactoryMetaData beanFactoryMetaData) {
|
ConfigurationBeanFactoryMetadata beanFactoryMetadata) {
|
||||||
Map<String, Object> beans = new HashMap<>();
|
Map<String, Object> beans = new HashMap<>();
|
||||||
beans.putAll(context.getBeansWithAnnotation(ConfigurationProperties.class));
|
beans.putAll(context.getBeansWithAnnotation(ConfigurationProperties.class));
|
||||||
if (beanFactoryMetaData != null) {
|
if (beanFactoryMetadata != null) {
|
||||||
beans.putAll(beanFactoryMetaData
|
beans.putAll(beanFactoryMetadata
|
||||||
.getBeansWithFactoryAnnotation(ConfigurationProperties.class));
|
.getBeansWithFactoryAnnotation(ConfigurationProperties.class));
|
||||||
}
|
}
|
||||||
return beans;
|
return beans;
|
||||||
|
@ -204,7 +204,7 @@ public class ConfigurationPropertiesReportEndpoint implements ApplicationContext
|
||||||
* @return the prefix
|
* @return the prefix
|
||||||
*/
|
*/
|
||||||
private String extractPrefix(ApplicationContext context,
|
private String extractPrefix(ApplicationContext context,
|
||||||
ConfigurationBeanFactoryMetaData beanFactoryMetaData, String beanName) {
|
ConfigurationBeanFactoryMetadata beanFactoryMetaData, String beanName) {
|
||||||
ConfigurationProperties annotation = context.findAnnotationOnBean(beanName,
|
ConfigurationProperties annotation = context.findAnnotationOnBean(beanName,
|
||||||
ConfigurationProperties.class);
|
ConfigurationProperties.class);
|
||||||
if (beanFactoryMetaData != null) {
|
if (beanFactoryMetaData != null) {
|
||||||
|
|
|
@ -27,6 +27,7 @@ import org.springframework.beans.factory.config.BeanDefinition;
|
||||||
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
|
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
|
||||||
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
|
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
|
||||||
import org.springframework.core.annotation.AnnotationUtils;
|
import org.springframework.core.annotation.AnnotationUtils;
|
||||||
|
import org.springframework.util.ClassUtils;
|
||||||
import org.springframework.util.ReflectionUtils;
|
import org.springframework.util.ReflectionUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -36,11 +37,11 @@ import org.springframework.util.ReflectionUtils;
|
||||||
* @author Dave Syer
|
* @author Dave Syer
|
||||||
* @since 1.1.0
|
* @since 1.1.0
|
||||||
*/
|
*/
|
||||||
public class ConfigurationBeanFactoryMetaData implements BeanFactoryPostProcessor {
|
public class ConfigurationBeanFactoryMetadata implements BeanFactoryPostProcessor {
|
||||||
|
|
||||||
private ConfigurableListableBeanFactory beanFactory;
|
private ConfigurableListableBeanFactory beanFactory;
|
||||||
|
|
||||||
private final Map<String, MetaData> beans = new HashMap<>();
|
private final Map<String, FactoryMetadata> beansFactoryMetadata = new HashMap<>();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)
|
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)
|
||||||
|
@ -51,7 +52,7 @@ public class ConfigurationBeanFactoryMetaData implements BeanFactoryPostProcesso
|
||||||
String method = definition.getFactoryMethodName();
|
String method = definition.getFactoryMethodName();
|
||||||
String bean = definition.getFactoryBeanName();
|
String bean = definition.getFactoryBeanName();
|
||||||
if (method != null && bean != null) {
|
if (method != null && bean != null) {
|
||||||
this.beans.put(name, new MetaData(bean, method));
|
this.beansFactoryMetadata.put(name, new FactoryMetadata(bean, method));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -59,7 +60,7 @@ public class ConfigurationBeanFactoryMetaData implements BeanFactoryPostProcesso
|
||||||
public <A extends Annotation> Map<String, Object> getBeansWithFactoryAnnotation(
|
public <A extends Annotation> Map<String, Object> getBeansWithFactoryAnnotation(
|
||||||
Class<A> type) {
|
Class<A> type) {
|
||||||
Map<String, Object> result = new HashMap<>();
|
Map<String, Object> result = new HashMap<>();
|
||||||
for (String name : this.beans.keySet()) {
|
for (String name : this.beansFactoryMetadata.keySet()) {
|
||||||
if (findFactoryAnnotation(name, type) != null) {
|
if (findFactoryAnnotation(name, type) != null) {
|
||||||
result.put(name, this.beanFactory.getBean(name));
|
result.put(name, this.beanFactory.getBean(name));
|
||||||
}
|
}
|
||||||
|
@ -73,29 +74,29 @@ public class ConfigurationBeanFactoryMetaData implements BeanFactoryPostProcesso
|
||||||
return (method == null ? null : AnnotationUtils.findAnnotation(method, type));
|
return (method == null ? null : AnnotationUtils.findAnnotation(method, type));
|
||||||
}
|
}
|
||||||
|
|
||||||
private Method findFactoryMethod(String beanName) {
|
public Method findFactoryMethod(String beanName) {
|
||||||
if (!this.beans.containsKey(beanName)) {
|
if (!this.beansFactoryMetadata.containsKey(beanName)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
final AtomicReference<Method> found = new AtomicReference<>(null);
|
AtomicReference<Method> found = new AtomicReference<>(null);
|
||||||
MetaData meta = this.beans.get(beanName);
|
FactoryMetadata metadata = this.beansFactoryMetadata.get(beanName);
|
||||||
final String factory = meta.getMethod();
|
Class<?> factoryType = this.beanFactory.getType(metadata.getBean());
|
||||||
Class<?> type = this.beanFactory.getType(meta.getBean());
|
String factoryMethod = metadata.getMethod();
|
||||||
ReflectionUtils.doWithMethods(type, (method) -> {
|
ReflectionUtils.doWithMethods(factoryType, (method) -> {
|
||||||
if (method.getName().equals(factory)) {
|
if (method.getName().equals(factoryMethod)) {
|
||||||
found.compareAndSet(null, method);
|
found.compareAndSet(null, method);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return found.get();
|
return found.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class MetaData {
|
private static class FactoryMetadata {
|
||||||
|
|
||||||
private final String bean;
|
private final String bean;
|
||||||
|
|
||||||
private final String method;
|
private final String method;
|
||||||
|
|
||||||
MetaData(String bean, String method) {
|
FactoryMetadata(String bean, String method) {
|
||||||
this.bean = bean;
|
this.bean = bean;
|
||||||
this.method = method;
|
this.method = method;
|
||||||
}
|
}
|
|
@ -63,7 +63,7 @@ public class ConfigurationPropertiesBindingPostProcessor
|
||||||
private static final Log logger = LogFactory
|
private static final Log logger = LogFactory
|
||||||
.getLog(ConfigurationPropertiesBindingPostProcessor.class);
|
.getLog(ConfigurationPropertiesBindingPostProcessor.class);
|
||||||
|
|
||||||
private ConfigurationBeanFactoryMetaData beans = new ConfigurationBeanFactoryMetaData();
|
private ConfigurationBeanFactoryMetadata beans = new ConfigurationBeanFactoryMetadata();
|
||||||
|
|
||||||
private BeanFactory beanFactory;
|
private BeanFactory beanFactory;
|
||||||
|
|
||||||
|
@ -88,7 +88,7 @@ public class ConfigurationPropertiesBindingPostProcessor
|
||||||
* Set the bean meta-data store.
|
* Set the bean meta-data store.
|
||||||
* @param beans the bean meta data store
|
* @param beans the bean meta data store
|
||||||
*/
|
*/
|
||||||
public void setBeanMetaDataStore(ConfigurationBeanFactoryMetaData beans) {
|
public void setBeanMetadataStore(ConfigurationBeanFactoryMetadata beans) {
|
||||||
this.beans = beans;
|
this.beans = beans;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -44,10 +44,10 @@ public class ConfigurationPropertiesBindingPostProcessorRegistrar
|
||||||
BeanDefinitionRegistry registry) {
|
BeanDefinitionRegistry registry) {
|
||||||
if (!registry.containsBeanDefinition(BINDER_BEAN_NAME)) {
|
if (!registry.containsBeanDefinition(BINDER_BEAN_NAME)) {
|
||||||
BeanDefinitionBuilder meta = BeanDefinitionBuilder
|
BeanDefinitionBuilder meta = BeanDefinitionBuilder
|
||||||
.genericBeanDefinition(ConfigurationBeanFactoryMetaData.class);
|
.genericBeanDefinition(ConfigurationBeanFactoryMetadata.class);
|
||||||
BeanDefinitionBuilder bean = BeanDefinitionBuilder.genericBeanDefinition(
|
BeanDefinitionBuilder bean = BeanDefinitionBuilder.genericBeanDefinition(
|
||||||
ConfigurationPropertiesBindingPostProcessor.class);
|
ConfigurationPropertiesBindingPostProcessor.class);
|
||||||
bean.addPropertyReference("beanMetaDataStore", METADATA_BEAN_NAME);
|
bean.addPropertyReference("beanMetadataStore", METADATA_BEAN_NAME);
|
||||||
registry.registerBeanDefinition(BINDER_BEAN_NAME, bean.getBeanDefinition());
|
registry.registerBeanDefinition(BINDER_BEAN_NAME, bean.getBeanDefinition());
|
||||||
registry.registerBeanDefinition(METADATA_BEAN_NAME, meta.getBeanDefinition());
|
registry.registerBeanDefinition(METADATA_BEAN_NAME, meta.getBeanDefinition());
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue