This commit is contained in:
Madhura Bhave 2018-02-07 13:20:57 -08:00
parent 7d53c54364
commit dd3bcc5691
4 changed files with 30 additions and 29 deletions

View File

@ -47,7 +47,7 @@ import org.springframework.beans.BeansException;
import org.springframework.boot.actuate.endpoint.Sanitizer;
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
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.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
@ -107,15 +107,15 @@ public class ConfigurationPropertiesReportEndpoint implements ApplicationContext
private ContextConfigurationProperties describeConfigurationProperties(
ApplicationContext context, ObjectMapper mapper) {
ConfigurationBeanFactoryMetaData beanFactoryMetaData = getBeanFactoryMetaData(
ConfigurationBeanFactoryMetadata beanFactoryMetadata = getBeanFactoryMetadata(
context);
Map<String, Object> beans = getConfigurationPropertiesBeans(context,
beanFactoryMetaData);
beanFactoryMetadata);
Map<String, ConfigurationPropertiesBeanDescriptor> beanDescriptors = new HashMap<>();
for (Map.Entry<String, Object> entry : beans.entrySet()) {
String beanName = entry.getKey();
Object bean = entry.getValue();
String prefix = extractPrefix(context, beanFactoryMetaData, beanName);
String prefix = extractPrefix(context, beanFactoryMetadata, beanName);
beanDescriptors.put(beanName, new ConfigurationPropertiesBeanDescriptor(
prefix, sanitize(prefix, safeSerialize(mapper, bean, prefix))));
}
@ -123,10 +123,10 @@ public class ConfigurationPropertiesReportEndpoint implements ApplicationContext
context.getParent() == null ? null : context.getParent().getId());
}
private ConfigurationBeanFactoryMetaData getBeanFactoryMetaData(
private ConfigurationBeanFactoryMetadata getBeanFactoryMetadata(
ApplicationContext context) {
Map<String, ConfigurationBeanFactoryMetaData> beans = context
.getBeansOfType(ConfigurationBeanFactoryMetaData.class);
Map<String, ConfigurationBeanFactoryMetadata> beans = context
.getBeansOfType(ConfigurationBeanFactoryMetadata.class);
if (beans.size() == 1) {
return beans.values().iterator().next();
}
@ -135,11 +135,11 @@ public class ConfigurationPropertiesReportEndpoint implements ApplicationContext
private Map<String, Object> getConfigurationPropertiesBeans(
ApplicationContext context,
ConfigurationBeanFactoryMetaData beanFactoryMetaData) {
ConfigurationBeanFactoryMetadata beanFactoryMetadata) {
Map<String, Object> beans = new HashMap<>();
beans.putAll(context.getBeansWithAnnotation(ConfigurationProperties.class));
if (beanFactoryMetaData != null) {
beans.putAll(beanFactoryMetaData
if (beanFactoryMetadata != null) {
beans.putAll(beanFactoryMetadata
.getBeansWithFactoryAnnotation(ConfigurationProperties.class));
}
return beans;
@ -204,7 +204,7 @@ public class ConfigurationPropertiesReportEndpoint implements ApplicationContext
* @return the prefix
*/
private String extractPrefix(ApplicationContext context,
ConfigurationBeanFactoryMetaData beanFactoryMetaData, String beanName) {
ConfigurationBeanFactoryMetadata beanFactoryMetaData, String beanName) {
ConfigurationProperties annotation = context.findAnnotationOnBean(beanName,
ConfigurationProperties.class);
if (beanFactoryMetaData != null) {

View File

@ -27,6 +27,7 @@ import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.util.ClassUtils;
import org.springframework.util.ReflectionUtils;
/**
@ -36,11 +37,11 @@ import org.springframework.util.ReflectionUtils;
* @author Dave Syer
* @since 1.1.0
*/
public class ConfigurationBeanFactoryMetaData implements BeanFactoryPostProcessor {
public class ConfigurationBeanFactoryMetadata implements BeanFactoryPostProcessor {
private ConfigurableListableBeanFactory beanFactory;
private final Map<String, MetaData> beans = new HashMap<>();
private final Map<String, FactoryMetadata> beansFactoryMetadata = new HashMap<>();
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)
@ -51,7 +52,7 @@ public class ConfigurationBeanFactoryMetaData implements BeanFactoryPostProcesso
String method = definition.getFactoryMethodName();
String bean = definition.getFactoryBeanName();
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(
Class<A> type) {
Map<String, Object> result = new HashMap<>();
for (String name : this.beans.keySet()) {
for (String name : this.beansFactoryMetadata.keySet()) {
if (findFactoryAnnotation(name, type) != null) {
result.put(name, this.beanFactory.getBean(name));
}
@ -73,29 +74,29 @@ public class ConfigurationBeanFactoryMetaData implements BeanFactoryPostProcesso
return (method == null ? null : AnnotationUtils.findAnnotation(method, type));
}
private Method findFactoryMethod(String beanName) {
if (!this.beans.containsKey(beanName)) {
public Method findFactoryMethod(String beanName) {
if (!this.beansFactoryMetadata.containsKey(beanName)) {
return null;
}
final AtomicReference<Method> found = new AtomicReference<>(null);
MetaData meta = this.beans.get(beanName);
final String factory = meta.getMethod();
Class<?> type = this.beanFactory.getType(meta.getBean());
ReflectionUtils.doWithMethods(type, (method) -> {
if (method.getName().equals(factory)) {
AtomicReference<Method> found = new AtomicReference<>(null);
FactoryMetadata metadata = this.beansFactoryMetadata.get(beanName);
Class<?> factoryType = this.beanFactory.getType(metadata.getBean());
String factoryMethod = metadata.getMethod();
ReflectionUtils.doWithMethods(factoryType, (method) -> {
if (method.getName().equals(factoryMethod)) {
found.compareAndSet(null, method);
}
});
return found.get();
}
private static class MetaData {
private static class FactoryMetadata {
private final String bean;
private final String method;
MetaData(String bean, String method) {
FactoryMetadata(String bean, String method) {
this.bean = bean;
this.method = method;
}

View File

@ -63,7 +63,7 @@ public class ConfigurationPropertiesBindingPostProcessor
private static final Log logger = LogFactory
.getLog(ConfigurationPropertiesBindingPostProcessor.class);
private ConfigurationBeanFactoryMetaData beans = new ConfigurationBeanFactoryMetaData();
private ConfigurationBeanFactoryMetadata beans = new ConfigurationBeanFactoryMetadata();
private BeanFactory beanFactory;
@ -88,7 +88,7 @@ public class ConfigurationPropertiesBindingPostProcessor
* Set 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;
}

View File

@ -44,10 +44,10 @@ public class ConfigurationPropertiesBindingPostProcessorRegistrar
BeanDefinitionRegistry registry) {
if (!registry.containsBeanDefinition(BINDER_BEAN_NAME)) {
BeanDefinitionBuilder meta = BeanDefinitionBuilder
.genericBeanDefinition(ConfigurationBeanFactoryMetaData.class);
.genericBeanDefinition(ConfigurationBeanFactoryMetadata.class);
BeanDefinitionBuilder bean = BeanDefinitionBuilder.genericBeanDefinition(
ConfigurationPropertiesBindingPostProcessor.class);
bean.addPropertyReference("beanMetaDataStore", METADATA_BEAN_NAME);
bean.addPropertyReference("beanMetadataStore", METADATA_BEAN_NAME);
registry.registerBeanDefinition(BINDER_BEAN_NAME, bean.getBeanDefinition());
registry.registerBeanDefinition(METADATA_BEAN_NAME, meta.getBeanDefinition());
}