Skip to content

Commit ee8afc5

Browse files
committed
BeanDefinitions: Mix instanceSupplier and props
1 parent 7d29cf7 commit ee8afc5

File tree

18 files changed

+343
-558
lines changed

18 files changed

+343
-558
lines changed

spring-integration-core/src/main/java/org/springframework/integration/config/DefaultConfiguringBeanFactoryPostProcessor.java

Lines changed: 72 additions & 112 deletions
Large diffs are not rendered by default.

spring-integration-core/src/main/java/org/springframework/integration/config/GlobalChannelInterceptorInitializer.java

Lines changed: 10 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,15 @@
1616

1717
package org.springframework.integration.config;
1818

19-
import java.util.Arrays;
2019
import java.util.Map;
2120

2221
import org.springframework.beans.BeansException;
2322
import org.springframework.beans.factory.annotation.AnnotatedBeanDefinition;
2423
import org.springframework.beans.factory.config.BeanDefinition;
25-
import org.springframework.beans.factory.config.BeanExpressionContext;
26-
import org.springframework.beans.factory.config.BeanExpressionResolver;
2724
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
25+
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
2826
import org.springframework.beans.factory.support.BeanDefinitionReaderUtils;
2927
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
30-
import org.springframework.beans.factory.support.RootBeanDefinition;
3128
import org.springframework.core.type.AnnotationMetadata;
3229
import org.springframework.core.type.MethodMetadata;
3330
import org.springframework.integration.channel.interceptor.GlobalChannelInterceptorWrapper;
@@ -50,13 +47,10 @@ public class GlobalChannelInterceptorInitializer implements IntegrationConfigura
5047

5148
private ConfigurableListableBeanFactory beanFactory;
5249

53-
private BeanExpressionContext beanExpressionContext;
54-
5550
@Override
5651
public void initialize(ConfigurableListableBeanFactory beanFactory) throws BeansException {
5752
this.beanFactory = beanFactory;
5853
BeanDefinitionRegistry registry = (BeanDefinitionRegistry) beanFactory;
59-
this.beanExpressionContext = new BeanExpressionContext(beanFactory, null);
6054
for (String beanName : registry.getBeanDefinitionNames()) {
6155
BeanDefinition beanDefinition = registry.getBeanDefinition(beanName);
6256
if (beanDefinition instanceof AnnotatedBeanDefinition) {
@@ -71,44 +65,22 @@ public void initialize(ConfigurableListableBeanFactory beanFactory) throws Beans
7165
}
7266

7367
if (!CollectionUtils.isEmpty(annotationAttributes)) {
74-
Map<String, Object> attributes = annotationAttributes;
75-
RootBeanDefinition channelInterceptorWrapper =
76-
new RootBeanDefinition(GlobalChannelInterceptorWrapper.class,
77-
() -> createGlobalChannelInterceptorWrapper(beanName, attributes));
68+
BeanDefinitionBuilder builder =
69+
BeanDefinitionBuilder.genericBeanDefinition(GlobalChannelInterceptorWrapper.class,
70+
() -> createGlobalChannelInterceptorWrapper(beanName))
71+
.addConstructorArgReference(beanName)
72+
.addPropertyValue("patterns", annotationAttributes.get("patterns"))
73+
.addPropertyValue("order", annotationAttributes.get("order"));
7874

79-
BeanDefinitionReaderUtils.registerWithGeneratedName(channelInterceptorWrapper, registry);
75+
BeanDefinitionReaderUtils.registerWithGeneratedName(builder.getBeanDefinition(), registry);
8076
}
8177
}
8278
}
8379
}
8480

85-
private GlobalChannelInterceptorWrapper createGlobalChannelInterceptorWrapper(String interceptorBeanName,
86-
Map<String, Object> annotationAttributes) {
87-
81+
private GlobalChannelInterceptorWrapper createGlobalChannelInterceptorWrapper(String interceptorBeanName) {
8882
ChannelInterceptor interceptor = this.beanFactory.getBean(interceptorBeanName, ChannelInterceptor.class);
89-
GlobalChannelInterceptorWrapper interceptorWrapper = new GlobalChannelInterceptorWrapper(interceptor);
90-
String[] patterns =
91-
Arrays.stream((String[]) annotationAttributes.get("patterns"))
92-
.map(this::resolveEmbeddedValue)
93-
.toArray(String[]::new);
94-
interceptorWrapper.setPatterns(patterns);
95-
interceptorWrapper.setOrder((Integer) annotationAttributes.get("order"));
96-
return interceptorWrapper;
97-
}
98-
99-
private String resolveEmbeddedValue(String value) {
100-
String valueToReturn = this.beanFactory.resolveEmbeddedValue(value);
101-
if (valueToReturn == null || !(valueToReturn.startsWith("#{") && value.endsWith("}"))) {
102-
return valueToReturn;
103-
}
104-
105-
BeanExpressionResolver beanExpressionResolver = this.beanFactory.getBeanExpressionResolver();
106-
if (beanExpressionResolver != null) {
107-
Object result = beanExpressionResolver.evaluate(valueToReturn, this.beanExpressionContext);
108-
return result != null ? result.toString() : null;
109-
}
110-
111-
return null;
83+
return new GlobalChannelInterceptorWrapper(interceptor);
11284
}
11385

11486
}

spring-integration-core/src/main/java/org/springframework/integration/config/IdempotentReceiverAutoProxyCreatorInitializer.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2014-2019 the original author or authors.
2+
* Copyright 2014-2021 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -45,6 +45,7 @@
4545
* to Consumer Endpoints are present.
4646
*
4747
* @author Artem Bilan
48+
*
4849
* @since 4.1
4950
*/
5051
public class IdempotentReceiverAutoProxyCreatorInitializer implements IntegrationConfigurationInitializer {
@@ -58,7 +59,7 @@ public class IdempotentReceiverAutoProxyCreatorInitializer implements Integratio
5859
public void initialize(ConfigurableListableBeanFactory beanFactory) throws BeansException {
5960
BeanDefinitionRegistry registry = (BeanDefinitionRegistry) beanFactory;
6061

61-
List<Map<String, String>> idempotentEndpointsMapping = new ManagedList<Map<String, String>>();
62+
List<Map<String, String>> idempotentEndpointsMapping = new ManagedList<>();
6263

6364
for (String beanName : registry.getBeanDefinitionNames()) {
6465
BeanDefinition beanDefinition = registry.getBeanDefinition(beanName);
@@ -69,7 +70,7 @@ public void initialize(ConfigurableListableBeanFactory beanFactory) throws Beans
6970
String mapping = (String) value;
7071
String[] endpoints = StringUtils.tokenizeToStringArray(mapping, ",");
7172
for (String endpoint : endpoints) {
72-
Map<String, String> idempotentEndpoint = new ManagedMap<String, String>();
73+
Map<String, String> idempotentEndpoint = new ManagedMap<>();
7374
idempotentEndpoint.put(beanName,
7475
beanFactory.resolveEmbeddedValue(endpoint) + IntegrationConfigUtils.HANDLER_ALIAS_SUFFIX);
7576
idempotentEndpointsMapping.add(idempotentEndpoint);
@@ -81,16 +82,19 @@ else if (beanDefinition instanceof AnnotatedBeanDefinition) {
8182
}
8283

8384
if (!idempotentEndpointsMapping.isEmpty()) {
84-
BeanDefinition bd = BeanDefinitionBuilder.rootBeanDefinition(IdempotentReceiverAutoProxyCreator.class)
85-
.addPropertyValue("idempotentEndpointsMapping", idempotentEndpointsMapping)
86-
.getBeanDefinition();
85+
BeanDefinition bd =
86+
BeanDefinitionBuilder.rootBeanDefinition(IdempotentReceiverAutoProxyCreator.class,
87+
IdempotentReceiverAutoProxyCreator::new)
88+
.addPropertyValue("idempotentEndpointsMapping", idempotentEndpointsMapping)
89+
.getBeanDefinition();
8790
registry.registerBeanDefinition(IDEMPOTENT_RECEIVER_AUTO_PROXY_CREATOR_BEAN_NAME, bd);
8891
}
8992
}
9093

9194
private void annotated(ConfigurableListableBeanFactory beanFactory,
9295
List<Map<String, String>> idempotentEndpointsMapping, String beanName, BeanDefinition beanDefinition)
9396
throws LinkageError {
97+
9498
if (beanDefinition.getSource() instanceof MethodMetadata) {
9599
MethodMetadata beanMethod = (MethodMetadata) beanDefinition.getSource();
96100
String annotationType = IdempotentReceiver.class.getName();
@@ -127,7 +131,7 @@ private void annotated(ConfigurableListableBeanFactory beanFactory,
127131

128132
String[] interceptors = (String[]) value;
129133
for (String interceptor : interceptors) {
130-
Map<String, String> idempotentEndpoint = new ManagedMap<String, String>();
134+
Map<String, String> idempotentEndpoint = new ManagedMap<>();
131135
idempotentEndpoint.put(interceptor, endpoint);
132136
idempotentEndpointsMapping.add(idempotentEndpoint);
133137
}

spring-integration-core/src/main/java/org/springframework/integration/config/IntegrationConfigUtils.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,12 @@ public static void registerSpelFunctionBean(BeanDefinitionRegistry registry, Str
5959
public static void registerSpelFunctionBean(BeanDefinitionRegistry registry, String functionId, Class<?> aClass,
6060
String methodSignature) {
6161

62-
registry.registerBeanDefinition(functionId, new RootBeanDefinition(SpelFunctionFactoryBean.class,
63-
() -> new SpelFunctionFactoryBean(aClass, methodSignature)));
62+
BeanDefinitionBuilder builder =
63+
BeanDefinitionBuilder.genericBeanDefinition(SpelFunctionFactoryBean.class,
64+
() -> new SpelFunctionFactoryBean(aClass, methodSignature))
65+
.addConstructorArgValue(aClass)
66+
.addConstructorArgValue(methodSignature);
67+
registry.registerBeanDefinition(functionId, builder.getBeanDefinition());
6468
}
6569

6670
public static void autoCreateDirectChannel(String channelName, BeanDefinitionRegistry registry) {

spring-integration-core/src/main/java/org/springframework/integration/config/MessageHistoryRegistrar.java

Lines changed: 9 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,16 @@
1616

1717
package org.springframework.integration.config;
1818

19-
import java.util.Arrays;
2019
import java.util.Map;
2120

2221
import org.springframework.beans.factory.BeanDefinitionStoreException;
23-
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
22+
import org.springframework.beans.factory.config.BeanDefinition;
23+
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
2424
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
25-
import org.springframework.beans.factory.support.RootBeanDefinition;
26-
import org.springframework.context.ConfigurableApplicationContext;
2725
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
2826
import org.springframework.core.type.AnnotationMetadata;
2927
import org.springframework.integration.context.IntegrationContextUtils;
3028
import org.springframework.integration.history.MessageHistoryConfigurer;
31-
import org.springframework.util.StringUtils;
3229

3330
/**
3431
* Registers the {@link MessageHistoryConfigurer} {@link org.springframework.beans.factory.config.BeanDefinition}
@@ -63,35 +60,14 @@ public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, B
6360
patterns = (String) componentNamePatterns;
6461
}
6562

66-
registry.registerBeanDefinition(IntegrationContextUtils.INTEGRATION_MESSAGE_HISTORY_CONFIGURER_BEAN_NAME,
67-
new RootBeanDefinition(MessageHistoryConfigurer.class,
68-
() -> createMessageHistoryConfigurer(registry, patterns)));
69-
}
70-
71-
private MessageHistoryConfigurer createMessageHistoryConfigurer(BeanDefinitionRegistry registry, String patterns) {
72-
MessageHistoryConfigurer messageHistoryConfigurer = new MessageHistoryConfigurer();
73-
if (StringUtils.hasText(patterns)) {
74-
ConfigurableBeanFactory beanFactory = null;
75-
if (registry instanceof ConfigurableBeanFactory) {
76-
beanFactory = (ConfigurableBeanFactory) registry;
77-
}
78-
else if (registry instanceof ConfigurableApplicationContext) {
79-
beanFactory = ((ConfigurableApplicationContext) registry).getBeanFactory();
80-
}
63+
BeanDefinition messageHistoryConfigurer =
64+
BeanDefinitionBuilder.genericBeanDefinition(MessageHistoryConfigurer.class,
65+
MessageHistoryConfigurer::new)
66+
.addPropertyValue("componentNamePatterns", patterns)
67+
.getBeanDefinition();
8168

82-
String[] patternsToSet = StringUtils.delimitedListToStringArray(patterns, ",", " ");
83-
if (beanFactory != null) {
84-
patternsToSet =
85-
Arrays.stream(patternsToSet)
86-
.map(beanFactory::resolveEmbeddedValue)
87-
.flatMap((pattern) ->
88-
Arrays.stream(StringUtils.delimitedListToStringArray(pattern, ",", " ")))
89-
.toArray(String[]::new);
90-
}
91-
messageHistoryConfigurer.setComponentNamePatterns(patternsToSet);
92-
}
93-
94-
return messageHistoryConfigurer;
69+
registry.registerBeanDefinition(IntegrationContextUtils.INTEGRATION_MESSAGE_HISTORY_CONFIGURER_BEAN_NAME,
70+
messageHistoryConfigurer);
9571
}
9672

9773
}

0 commit comments

Comments
 (0)