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

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

Loading…
Cancel
Save