下面列出了怎么用org.springframework.beans.factory.support.ManagedSet的API类实例代码及写法,或者点击链接到github查看源代码。
/**
* Parses a list of elements into a set of beans/standard content.
*
* @param grandChildren - The set of beans/content in a bean property
* @param child - The property tag for the parent.
* @param parent - The parent bean that the tag is nested in.
* @param parserContext - Provided information and functionality regarding current bean set.
* @return A managedSet of the nested content.
*/
protected ManagedSet parseSet(ArrayList<Element> grandChildren, Element child, BeanDefinitionBuilder parent,
ParserContext parserContext) {
ManagedSet setItems = new ManagedSet();
for (int i = 0; i < grandChildren.size(); i++) {
Element grandChild = grandChildren.get(i);
if (child.getTagName().compareTo("value") == 0) {
setItems.add(grandChild.getTextContent());
} else {
setItems.add(parseBean(grandChild, parent, parserContext));
}
}
String merge = child.getAttribute("merge");
if (merge != null) {
setItems.setMergeEnabled(Boolean.valueOf(merge));
}
return setItems;
}
/**
* Iterates through the set values and calls helpers to process the value
*
* @param setVal the set to process
* @param propertyName name of the property which has the set value
* @param nestedBeanStack stack of bean containers which contains the set property
*/
protected void visitSet(Set setVal, String propertyName, Stack<BeanDefinitionHolder> nestedBeanStack) {
boolean isMergeEnabled = false;
if (setVal instanceof ManagedSet) {
isMergeEnabled = ((ManagedSet) setVal).isMergeEnabled();
}
ManagedSet newSet = new ManagedSet();
newSet.setMergeEnabled(isMergeEnabled);
for (Object elem : setVal) {
if (isStringValue(elem)) {
elem = processSetStringPropertyValue(propertyName, setVal, getString(elem), nestedBeanStack,
beanProcessors);
} else {
elem = visitPropertyValue(propertyName, elem, nestedBeanStack);
}
newSet.add(elem);
}
setVal.clear();
setVal.addAll(newSet);
}
private XStream createStream() {
XStream stream = new XStream();
stream.registerConverter(new BeanDefinitionConverter(stream.getMapper()));
stream.registerConverter(new BeanDefinitionHolderConverter(stream.getMapper()));
stream.registerConverter(new TypedStringValueConverter());
stream.registerConverter(new ManagedCollectionConverter(stream.getMapper()));
stream.registerConverter(new ManagedMapConverter(stream.getMapper()));
stream.registerConverter(new RuntimeBeanReferenceConverter());
stream.alias("map", ManagedMap.class);
stream.alias("list", ManagedList.class);
stream.alias("set", ManagedSet.class);
stream.alias("array", ManagedArray.class);
stream.aliasType("bean", BeanDefinition.class);
stream.alias("bean", BeanDefinitionHolder.class);
stream.alias("ref", RuntimeBeanReference.class);
return stream;
}
/**
* Parse a set element.
*/
public Set<Object> parseSetElement(Element collectionEle, @Nullable BeanDefinition bd) {
String defaultElementType = collectionEle.getAttribute(VALUE_TYPE_ATTRIBUTE);
NodeList nl = collectionEle.getChildNodes();
ManagedSet<Object> target = new ManagedSet<>(nl.getLength());
target.setSource(extractSource(collectionEle));
target.setElementTypeName(defaultElementType);
target.setMergeEnabled(parseMergeAttribute(collectionEle));
parseCollectionElements(nl, target, bd, defaultElementType);
return target;
}
/**
* Parse a set element.
*/
public Set<Object> parseSetElement(Element collectionEle, @Nullable BeanDefinition bd) {
String defaultElementType = collectionEle.getAttribute(VALUE_TYPE_ATTRIBUTE);
NodeList nl = collectionEle.getChildNodes();
ManagedSet<Object> target = new ManagedSet<>(nl.getLength());
target.setSource(extractSource(collectionEle));
target.setElementTypeName(defaultElementType);
target.setMergeEnabled(parseMergeAttribute(collectionEle));
parseCollectionElements(nl, target, bd, defaultElementType);
return target;
}
/** 获取瞬时策略集合 */
private static ManagedSet<Object> getTransienceStrategies(Element configurationElement, ParserContext context) {
// 设置每个执行策略配置
ManagedSet<Object> strategies = new ManagedSet<>();
List<Element> elements = XmlUtility.getChildElementsByTagName(configurationElement, ElementDefinition.TRANSIENCE_STRATEGY.getName());
for (Element element : elements) {
String reference = element.getAttribute(AttributeDefinition.REFERENCE.getName());
strategies.add(new RuntimeBeanReference(reference));
}
return strategies;
}
/** 获取持久策略集合 */
private static ManagedSet<Object> getPersistenceStrategies(Element configurationElement, ParserContext context) {
// 设置每个执行策略配置
ManagedSet<Object> strategies = new ManagedSet<>();
List<Element> elements = XmlUtility.getChildElementsByTagName(configurationElement, ElementDefinition.PERSISTENCE_STRATEGY.getName());
for (Element element : elements) {
String reference = element.getAttribute(AttributeDefinition.REFERENCE.getName());
strategies.add(new RuntimeBeanReference(reference));
}
return strategies;
}
/**
* Parse a set element.
*/
public Set<Object> parseSetElement(Element collectionEle, BeanDefinition bd) {
String defaultElementType = collectionEle.getAttribute(VALUE_TYPE_ATTRIBUTE);
NodeList nl = collectionEle.getChildNodes();
ManagedSet<Object> target = new ManagedSet<Object>(nl.getLength());
target.setSource(extractSource(collectionEle));
target.setElementTypeName(defaultElementType);
target.setMergeEnabled(parseMergeAttribute(collectionEle));
parseCollectionElements(nl, target, bd, defaultElementType);
return target;
}
/**
* Parse a set element.
*/
public Set<Object> parseSetElement(Element collectionEle, BeanDefinition bd) {
String defaultElementType = collectionEle.getAttribute(VALUE_TYPE_ATTRIBUTE);
NodeList nl = collectionEle.getChildNodes();
ManagedSet<Object> target = new ManagedSet<Object>(nl.getLength());
target.setSource(extractSource(collectionEle));
target.setElementTypeName(defaultElementType);
target.setMergeEnabled(parseMergeAttribute(collectionEle));
parseCollectionElements(nl, target, bd, defaultElementType);
return target;
}
/**
* Parse a set element.
*/
public Set<Object> parseSetElement(Element collectionEle, BeanDefinition bd) {
String defaultElementType = collectionEle.getAttribute(VALUE_TYPE_ATTRIBUTE);
NodeList nl = collectionEle.getChildNodes();
ManagedSet<Object> target = new ManagedSet<Object>(nl.getLength());
target.setSource(extractSource(collectionEle));
target.setElementTypeName(defaultElementType);
target.setMergeEnabled(parseMergeAttribute(collectionEle));
parseCollectionElements(nl, target, bd, defaultElementType);
return target;
}
public boolean canConvert(Class type) {
return type.equals(ManagedList.class) || type.equals(ManagedArray.class) || type.equals(ManagedSet.class);
}