Consistent and efficient access to BeanDefinition argument values
Issue: SPR-16192
This commit is contained in:
@@ -105,16 +105,16 @@ class HandlersBeanDefinitionParser implements BeanDefinitionParser {
|
||||
private interface HandlerMappingStrategy {
|
||||
|
||||
void addMapping(Element mappingElement, ManagedMap<String, Object> map, ParserContext context);
|
||||
|
||||
}
|
||||
|
||||
|
||||
private static class WebSocketHandlerMappingStrategy implements HandlerMappingStrategy {
|
||||
|
||||
private final RuntimeBeanReference handshakeHandlerReference;
|
||||
|
||||
private final ManagedList<?> interceptorsList;
|
||||
|
||||
private WebSocketHandlerMappingStrategy(RuntimeBeanReference handshakeHandler, ManagedList<?> interceptors) {
|
||||
public WebSocketHandlerMappingStrategy(RuntimeBeanReference handshakeHandler, ManagedList<?> interceptors) {
|
||||
this.handshakeHandlerReference = handshakeHandler;
|
||||
this.interceptorsList = interceptors;
|
||||
}
|
||||
@@ -125,10 +125,10 @@ class HandlersBeanDefinitionParser implements BeanDefinitionParser {
|
||||
List<String> mappings = Arrays.asList(StringUtils.tokenizeToStringArray(pathAttribute, ","));
|
||||
RuntimeBeanReference handlerReference = new RuntimeBeanReference(element.getAttribute("handler"));
|
||||
|
||||
ConstructorArgumentValues cavs = new ConstructorArgumentValues();
|
||||
cavs.addIndexedArgumentValue(0, handlerReference);
|
||||
cavs.addIndexedArgumentValue(1, this.handshakeHandlerReference);
|
||||
RootBeanDefinition requestHandlerDef = new RootBeanDefinition(WebSocketHttpRequestHandler.class, cavs, null);
|
||||
ConstructorArgumentValues cargs = new ConstructorArgumentValues();
|
||||
cargs.addIndexedArgumentValue(0, handlerReference);
|
||||
cargs.addIndexedArgumentValue(1, this.handshakeHandlerReference);
|
||||
RootBeanDefinition requestHandlerDef = new RootBeanDefinition(WebSocketHttpRequestHandler.class, cargs, null);
|
||||
requestHandlerDef.setSource(context.extractSource(element));
|
||||
requestHandlerDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
|
||||
requestHandlerDef.getPropertyValues().add("handshakeInterceptors", this.interceptorsList);
|
||||
@@ -141,12 +141,12 @@ class HandlersBeanDefinitionParser implements BeanDefinitionParser {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private static class SockJsHandlerMappingStrategy implements HandlerMappingStrategy {
|
||||
|
||||
private final RuntimeBeanReference sockJsService;
|
||||
|
||||
|
||||
private SockJsHandlerMappingStrategy(RuntimeBeanReference sockJsService) {
|
||||
public SockJsHandlerMappingStrategy(RuntimeBeanReference sockJsService) {
|
||||
this.sockJsService = sockJsService;
|
||||
}
|
||||
|
||||
@@ -156,11 +156,11 @@ class HandlersBeanDefinitionParser implements BeanDefinitionParser {
|
||||
List<String> mappings = Arrays.asList(StringUtils.tokenizeToStringArray(pathAttribute, ","));
|
||||
RuntimeBeanReference handlerReference = new RuntimeBeanReference(element.getAttribute("handler"));
|
||||
|
||||
ConstructorArgumentValues cavs = new ConstructorArgumentValues();
|
||||
cavs.addIndexedArgumentValue(0, this.sockJsService, "SockJsService");
|
||||
cavs.addIndexedArgumentValue(1, handlerReference, "WebSocketHandler");
|
||||
ConstructorArgumentValues cargs = new ConstructorArgumentValues();
|
||||
cargs.addIndexedArgumentValue(0, this.sockJsService, "SockJsService");
|
||||
cargs.addIndexedArgumentValue(1, handlerReference, "WebSocketHandler");
|
||||
|
||||
RootBeanDefinition requestHandlerDef = new RootBeanDefinition(SockJsHttpRequestHandler.class, cavs, null);
|
||||
RootBeanDefinition requestHandlerDef = new RootBeanDefinition(SockJsHttpRequestHandler.class, cargs, null);
|
||||
requestHandlerDef.setSource(context.extractSource(element));
|
||||
requestHandlerDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
|
||||
String requestHandlerName = context.getReaderContext().registerWithGeneratedName(requestHandlerDef);
|
||||
|
||||
@@ -243,14 +243,14 @@ class MessageBrokerBeanDefinitionParser implements BeanDefinitionParser {
|
||||
}
|
||||
}
|
||||
}
|
||||
ConstructorArgumentValues argValues = new ConstructorArgumentValues();
|
||||
ConstructorArgumentValues cargs = new ConstructorArgumentValues();
|
||||
if (executor != null) {
|
||||
executor.getPropertyValues().add("threadNamePrefix", name + "-");
|
||||
String executorName = name + "Executor";
|
||||
registerBeanDefByName(executorName, executor, context, source);
|
||||
argValues.addIndexedArgumentValue(0, new RuntimeBeanReference(executorName));
|
||||
cargs.addIndexedArgumentValue(0, new RuntimeBeanReference(executorName));
|
||||
}
|
||||
RootBeanDefinition channelDef = new RootBeanDefinition(ExecutorSubscribableChannel.class, argValues, null);
|
||||
RootBeanDefinition channelDef = new RootBeanDefinition(ExecutorSubscribableChannel.class, cargs, null);
|
||||
ManagedList<? super Object> interceptors = new ManagedList<>();
|
||||
if (element != null) {
|
||||
Element interceptorsElement = DomUtils.getChildElementByTagName(element, "interceptors");
|
||||
@@ -288,11 +288,11 @@ class MessageBrokerBeanDefinitionParser implements BeanDefinitionParser {
|
||||
stompHandlerDef.getPropertyValues().add("errorHandler", errorHandlerRef);
|
||||
}
|
||||
|
||||
ConstructorArgumentValues cavs = new ConstructorArgumentValues();
|
||||
cavs.addIndexedArgumentValue(0, inChannel);
|
||||
cavs.addIndexedArgumentValue(1, outChannel);
|
||||
ConstructorArgumentValues cargs = new ConstructorArgumentValues();
|
||||
cargs.addIndexedArgumentValue(0, inChannel);
|
||||
cargs.addIndexedArgumentValue(1, outChannel);
|
||||
|
||||
RootBeanDefinition handlerDef = new RootBeanDefinition(SubProtocolWebSocketHandler.class, cavs, null);
|
||||
RootBeanDefinition handlerDef = new RootBeanDefinition(SubProtocolWebSocketHandler.class, cargs, null);
|
||||
handlerDef.getPropertyValues().addPropertyValue("protocolHandlers", stompHandlerDef);
|
||||
registerBeanDefByName(WEB_SOCKET_HANDLER_BEAN_NAME, handlerDef, context, source);
|
||||
RuntimeBeanReference result = new RuntimeBeanReference(WEB_SOCKET_HANDLER_BEAN_NAME);
|
||||
@@ -329,10 +329,10 @@ class MessageBrokerBeanDefinitionParser implements BeanDefinitionParser {
|
||||
element, SCHEDULER_BEAN_NAME, cxt, source);
|
||||
|
||||
if (sockJsService != null) {
|
||||
ConstructorArgumentValues cavs = new ConstructorArgumentValues();
|
||||
cavs.addIndexedArgumentValue(0, sockJsService);
|
||||
cavs.addIndexedArgumentValue(1, subProtoHandler);
|
||||
beanDef = new RootBeanDefinition(SockJsHttpRequestHandler.class, cavs, null);
|
||||
ConstructorArgumentValues cargs = new ConstructorArgumentValues();
|
||||
cargs.addIndexedArgumentValue(0, sockJsService);
|
||||
cargs.addIndexedArgumentValue(1, subProtoHandler);
|
||||
beanDef = new RootBeanDefinition(SockJsHttpRequestHandler.class, cargs, null);
|
||||
|
||||
// Register alias for backwards compatibility with 4.1
|
||||
cxt.getRegistry().registerAlias(SCHEDULER_BEAN_NAME, SOCKJS_SCHEDULER_BEAN_NAME);
|
||||
@@ -344,10 +344,10 @@ class MessageBrokerBeanDefinitionParser implements BeanDefinitionParser {
|
||||
String allowedOrigins = element.getAttribute("allowed-origins");
|
||||
List<String> origins = Arrays.asList(StringUtils.tokenizeToStringArray(allowedOrigins, ","));
|
||||
interceptors.add(new OriginHandshakeInterceptor(origins));
|
||||
ConstructorArgumentValues cavs = new ConstructorArgumentValues();
|
||||
cavs.addIndexedArgumentValue(0, subProtoHandler);
|
||||
cavs.addIndexedArgumentValue(1, handler);
|
||||
beanDef = new RootBeanDefinition(WebSocketHttpRequestHandler.class, cavs, null);
|
||||
ConstructorArgumentValues cargs = new ConstructorArgumentValues();
|
||||
cargs.addIndexedArgumentValue(0, subProtoHandler);
|
||||
cargs.addIndexedArgumentValue(1, handler);
|
||||
beanDef = new RootBeanDefinition(WebSocketHttpRequestHandler.class, cargs, null);
|
||||
beanDef.getPropertyValues().add("handshakeInterceptors", interceptors);
|
||||
}
|
||||
return new RuntimeBeanReference(registerBeanDef(beanDef, cxt, source));
|
||||
@@ -361,16 +361,16 @@ class MessageBrokerBeanDefinitionParser implements BeanDefinitionParser {
|
||||
Element simpleBrokerElem = DomUtils.getChildElementByTagName(brokerElement, "simple-broker");
|
||||
Element brokerRelayElem = DomUtils.getChildElementByTagName(brokerElement, "stomp-broker-relay");
|
||||
|
||||
ConstructorArgumentValues cavs = new ConstructorArgumentValues();
|
||||
cavs.addIndexedArgumentValue(0, inChannel);
|
||||
cavs.addIndexedArgumentValue(1, outChannel);
|
||||
cavs.addIndexedArgumentValue(2, brokerChannel);
|
||||
ConstructorArgumentValues cargs = new ConstructorArgumentValues();
|
||||
cargs.addIndexedArgumentValue(0, inChannel);
|
||||
cargs.addIndexedArgumentValue(1, outChannel);
|
||||
cargs.addIndexedArgumentValue(2, brokerChannel);
|
||||
|
||||
RootBeanDefinition brokerDef;
|
||||
if (simpleBrokerElem != null) {
|
||||
String prefix = simpleBrokerElem.getAttribute("prefix");
|
||||
cavs.addIndexedArgumentValue(3, Arrays.asList(StringUtils.tokenizeToStringArray(prefix, ",")));
|
||||
brokerDef = new RootBeanDefinition(SimpleBrokerMessageHandler.class, cavs, null);
|
||||
cargs.addIndexedArgumentValue(3, Arrays.asList(StringUtils.tokenizeToStringArray(prefix, ",")));
|
||||
brokerDef = new RootBeanDefinition(SimpleBrokerMessageHandler.class, cargs, null);
|
||||
if (brokerElement.hasAttribute("path-matcher")) {
|
||||
String pathMatcherRef = brokerElement.getAttribute("path-matcher");
|
||||
brokerDef.getPropertyValues().add("pathMatcher", new RuntimeBeanReference(pathMatcherRef));
|
||||
@@ -386,7 +386,7 @@ class MessageBrokerBeanDefinitionParser implements BeanDefinitionParser {
|
||||
}
|
||||
else if (brokerRelayElem != null) {
|
||||
String prefix = brokerRelayElem.getAttribute("prefix");
|
||||
cavs.addIndexedArgumentValue(3, Arrays.asList(StringUtils.tokenizeToStringArray(prefix, ",")));
|
||||
cargs.addIndexedArgumentValue(3, Arrays.asList(StringUtils.tokenizeToStringArray(prefix, ",")));
|
||||
|
||||
MutablePropertyValues values = new MutablePropertyValues();
|
||||
if (brokerRelayElem.hasAttribute("relay-host")) {
|
||||
@@ -431,7 +431,7 @@ class MessageBrokerBeanDefinitionParser implements BeanDefinitionParser {
|
||||
values.add("systemSubscriptions", map);
|
||||
}
|
||||
Class<?> handlerType = StompBrokerRelayMessageHandler.class;
|
||||
brokerDef = new RootBeanDefinition(handlerType, cavs, values);
|
||||
brokerDef = new RootBeanDefinition(handlerType, cargs, values);
|
||||
}
|
||||
else {
|
||||
// Should not happen
|
||||
@@ -487,9 +487,9 @@ class MessageBrokerBeanDefinitionParser implements BeanDefinitionParser {
|
||||
converters.add(jacksonConverterDef);
|
||||
}
|
||||
}
|
||||
ConstructorArgumentValues cavs = new ConstructorArgumentValues();
|
||||
cavs.addIndexedArgumentValue(0, converters);
|
||||
RootBeanDefinition messageConverterDef = new RootBeanDefinition(CompositeMessageConverter.class, cavs, null);
|
||||
ConstructorArgumentValues cargs = new ConstructorArgumentValues();
|
||||
cargs.addIndexedArgumentValue(0, converters);
|
||||
RootBeanDefinition messageConverterDef = new RootBeanDefinition(CompositeMessageConverter.class, cargs, null);
|
||||
String name = MESSAGE_CONVERTER_BEAN_NAME;
|
||||
registerBeanDefByName(name, messageConverterDef, context, source);
|
||||
return new RuntimeBeanReference(name);
|
||||
@@ -498,9 +498,9 @@ class MessageBrokerBeanDefinitionParser implements BeanDefinitionParser {
|
||||
private RuntimeBeanReference registerMessagingTemplate(Element element, RuntimeBeanReference brokerChannel,
|
||||
RuntimeBeanReference messageConverter, ParserContext context, @Nullable Object source) {
|
||||
|
||||
ConstructorArgumentValues cavs = new ConstructorArgumentValues();
|
||||
cavs.addIndexedArgumentValue(0, brokerChannel);
|
||||
RootBeanDefinition beanDef = new RootBeanDefinition(SimpMessagingTemplate.class,cavs, null);
|
||||
ConstructorArgumentValues cargs = new ConstructorArgumentValues();
|
||||
cargs.addIndexedArgumentValue(0, brokerChannel);
|
||||
RootBeanDefinition beanDef = new RootBeanDefinition(SimpMessagingTemplate.class, cargs, null);
|
||||
if (element.hasAttribute("user-destination-prefix")) {
|
||||
beanDef.getPropertyValues().add("userDestinationPrefix", element.getAttribute("user-destination-prefix"));
|
||||
}
|
||||
@@ -515,17 +515,17 @@ class MessageBrokerBeanDefinitionParser implements BeanDefinitionParser {
|
||||
RuntimeBeanReference converter, RuntimeBeanReference messagingTemplate,
|
||||
ParserContext context, @Nullable Object source) {
|
||||
|
||||
ConstructorArgumentValues cavs = new ConstructorArgumentValues();
|
||||
cavs.addIndexedArgumentValue(0, inChannel);
|
||||
cavs.addIndexedArgumentValue(1, outChannel);
|
||||
cavs.addIndexedArgumentValue(2, messagingTemplate);
|
||||
ConstructorArgumentValues cargs = new ConstructorArgumentValues();
|
||||
cargs.addIndexedArgumentValue(0, inChannel);
|
||||
cargs.addIndexedArgumentValue(1, outChannel);
|
||||
cargs.addIndexedArgumentValue(2, messagingTemplate);
|
||||
|
||||
MutablePropertyValues values = new MutablePropertyValues();
|
||||
String prefixAttribute = messageBrokerElement.getAttribute("application-destination-prefix");
|
||||
values.add("destinationPrefixes", Arrays.asList(StringUtils.tokenizeToStringArray(prefixAttribute, ",")));
|
||||
values.add("messageConverter", converter);
|
||||
|
||||
RootBeanDefinition beanDef = new RootBeanDefinition(WebSocketAnnotationMethodMessageHandler.class, cavs, values);
|
||||
RootBeanDefinition beanDef = new RootBeanDefinition(WebSocketAnnotationMethodMessageHandler.class, cargs, values);
|
||||
if (messageBrokerElement.hasAttribute("path-matcher")) {
|
||||
String pathMatcherRef = messageBrokerElement.getAttribute("path-matcher");
|
||||
beanDef.getPropertyValues().add("pathMatcher", new RuntimeBeanReference(pathMatcherRef));
|
||||
|
||||
Reference in New Issue
Block a user