Removed the workaround for multi-lock namespace definition

Removed the workaround for multi-lock namespace definition
Employed proper solution where dependencies are explicitly defined to
help spring create beans in a desired order.
pull/796/head
Rui Gu 8 years ago
parent 579d915a8a
commit 4d8a16ac5e

@ -19,6 +19,7 @@ import java.util.List;
import org.redisson.Redisson; import org.redisson.Redisson;
import org.redisson.config.Config; import org.redisson.config.Config;
import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.parsing.BeanComponentDefinition;
import org.springframework.beans.factory.parsing.CompositeComponentDefinition; import org.springframework.beans.factory.parsing.CompositeComponentDefinition;
import org.springframework.beans.factory.support.AbstractBeanDefinition; import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.BeanDefinitionBuilder;
@ -83,7 +84,7 @@ public final class RedissonDefinitionParser
this.helper = helper; this.helper = helper;
} }
private void parseChildElements(Element element, String parentId, String redissonRef, ParserContext parserContext) { private void parseChildElements(Element element, String parentId, String redissonRef, BeanDefinitionBuilder redissonDef, ParserContext parserContext) {
if (element.hasChildNodes()) { if (element.hasChildNodes()) {
CompositeComponentDefinition compositeDef CompositeComponentDefinition compositeDef
= new CompositeComponentDefinition(parentId, = new CompositeComponentDefinition(parentId,
@ -98,9 +99,9 @@ public final class RedissonDefinitionParser
String localName = parserContext.getDelegate().getLocalName(elt); String localName = parserContext.getDelegate().getLocalName(elt);
localName = Conventions.attributeNameToPropertyName(localName); localName = Conventions.attributeNameToPropertyName(localName);
if (ConfigType.contains(localName)) { if (ConfigType.contains(localName)) {
parseConfigTypes(elt, localName, parserContext); parseConfigTypes(elt, localName, redissonDef, parserContext);
} else if (AddressType.contains(localName)) { } else if (AddressType.contains(localName)) {
parseAddressTypes(elt, localName, parserContext); parseAddressTypes(elt, localName, redissonDef, parserContext);
} else if (helper.isRedissonNS(elt)) { } else if (helper.isRedissonNS(elt)) {
elt.setAttribute(REDISSON_REF, redissonRef); elt.setAttribute(REDISSON_REF, redissonRef);
parserContext.getDelegate().parseCustomElement(elt); parserContext.getDelegate().parseCustomElement(elt);
@ -110,7 +111,7 @@ public final class RedissonDefinitionParser
} }
} }
private void parseConfigTypes(Element element, String configType, ParserContext parserContext) { private void parseConfigTypes(Element element, String configType, BeanDefinitionBuilder redissonDef, ParserContext parserContext) {
BeanDefinitionBuilder builder BeanDefinitionBuilder builder
= helper.createBeanDefinitionBuilder(element, = helper.createBeanDefinitionBuilder(element,
parserContext, null); parserContext, null);
@ -122,16 +123,19 @@ public final class RedissonDefinitionParser
helper.registerBeanDefinition(builder, id, helper.registerBeanDefinition(builder, id,
helper.parseAliase(element), parserContext); helper.parseAliase(element), parserContext);
parseAttributes(element, parserContext, builder); parseAttributes(element, parserContext, builder);
parseChildElements(element, id, null, parserContext); redissonDef.addDependsOn(id);
parseChildElements(element, id, null, redissonDef, parserContext);
parserContext.getDelegate().parseQualifierElements(element, bd); parserContext.getDelegate().parseQualifierElements(element, bd);
} }
private void parseAddressTypes(Element element, String addressType, ParserContext parserContext) { private void parseAddressTypes(Element element, String addressType, BeanDefinitionBuilder redissonDef, ParserContext parserContext) {
helper.invoker(element, BeanComponentDefinition invoker = helper.invoker(element,
parserContext.getContainingComponent().getName(), parserContext.getContainingComponent().getName(),
"add" + StringUtils.capitalize(addressType), "add" + StringUtils.capitalize(addressType),
new String[]{element.getAttribute("value")}, new String[]{element.getAttribute("value")},
parserContext); parserContext);
String id = invoker.getName();
redissonDef.addDependsOn(id);
} }
private void parseAttributes(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { private void parseAttributes(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) {
@ -156,10 +160,7 @@ public final class RedissonDefinitionParser
attribute.getValue()); attribute.getValue());
} else { } else {
String value = attribute.getValue(); String value = attribute.getValue();
String localName = parserContext.getDelegate() String localName = helper.getName(element);
.getLocalName(element);
localName = Conventions
.attributeNameToPropertyName(localName);
if ("masterAddress".equals(propertyName) if ("masterAddress".equals(propertyName)
&& ConfigType.masterSlaveServers.name() && ConfigType.masterSlaveServers.name()
.equals(localName)) { .equals(localName)) {
@ -194,7 +195,7 @@ public final class RedissonDefinitionParser
String id = helper.getId(element, builder, parserContext); String id = helper.getId(element, builder, parserContext);
parseAttributes(element, parserContext, configBuilder); parseAttributes(element, parserContext, configBuilder);
//Sort out all the nested elements //Sort out all the nested elements
parseChildElements(element, configId, id, parserContext); parseChildElements(element, configId, id, builder, parserContext);
helper.registerBeanDefinition(builder, id, helper.registerBeanDefinition(builder, id,
helper.parseAliase(element), parserContext); helper.parseAliase(element), parserContext);

@ -44,7 +44,6 @@ public class RedissonMultiLockDefinitionParser
protected void parseNested(Element element, ParserContext parserContext, BeanDefinitionBuilder builder, BeanDefinition bd) { protected void parseNested(Element element, ParserContext parserContext, BeanDefinitionBuilder builder, BeanDefinition bd) {
bd.setDependsOn(element.getAttribute( bd.setDependsOn(element.getAttribute(
RedissonNamespaceParserSupport.REDISSON_REF_ATTRIBUTE)); RedissonNamespaceParserSupport.REDISSON_REF_ATTRIBUTE));
bd.setLazyInit(true);
List<Element> childElements = DomUtils.getChildElements(element); List<Element> childElements = DomUtils.getChildElements(element);
for (Element elt : childElements) { for (Element elt : childElements) {
String localName = elt.getLocalName(); String localName = elt.getLocalName();

Loading…
Cancel
Save