在网上搜了许多,感觉不够全面,就找了官方文档,下面记录如何找到对应的文档进入

网上许多博客都是以dateformat为实例进行编写的,通过官方的foo,能够学到更多的东西,下面贴一段代码,在官方示例上改了一点解析代码:

package com.theory.springdemo;

import java.util.List;

import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.ManagedList;
import org.springframework.beans.factory.xml.AbstractBeanDefinitionParser;
import org.springframework.beans.factory.xml.ParserContext;
import org.springframework.util.xml.DomUtils;
import org.w3c.dom.Element; public class ComponentBeanDefinitionParser extends AbstractBeanDefinitionParser { protected AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext) {
return parseComponentElement2(element);
}
// 这个是自己编写的,没有采用官方文档中定义的示例ComponentFactoryBean
private static AbstractBeanDefinition parseComponentElement2(Element ele) {
BeanDefinitionBuilder bean = BeanDefinitionBuilder.rootBeanDefinition(Component.class);
bean.addPropertyValue("name", ele.getAttribute("name"));
List<Element> childElements = DomUtils.getChildElementsByTagName(ele, "component");
//List<BeanDefinition> children = new ArrayList<>(); // 不能用这个,转换之类的会报错,ManageList是继承的ArrayList
ManagedList<BeanDefinition> children = new ManagedList<BeanDefinition>(childElements.size());
for (Element child : childElements) {
AbstractBeanDefinition cc = parseComponentElement2(child);
children.add(cc);
}
bean.addPropertyValue("components", children);
return bean.getBeanDefinition();
}
// 以下的代码都是官方文档中的
private static AbstractBeanDefinition parseComponentElement(Element element) {
BeanDefinitionBuilder factory = BeanDefinitionBuilder.rootBeanDefinition(ComponentFactoryBean.class);
factory.addPropertyValue("parent", parseComponent(element)); List<Element> childElements = DomUtils.getChildElementsByTagName(element, "component");
if (childElements != null && childElements.size() > 0) {
parseChildComponents(childElements, factory);
}
return factory.getBeanDefinition();
} private static BeanDefinition parseComponent(Element element) {
BeanDefinitionBuilder component = BeanDefinitionBuilder.rootBeanDefinition(Component.class);
component.addPropertyValue("name", element.getAttribute("name"));
return component.getBeanDefinition();
} private static void parseChildComponents(List<Element> childElements, BeanDefinitionBuilder factory) {
ManagedList<BeanDefinition> children = new ManagedList<BeanDefinition>(childElements.size());
for (Element element : childElements) {
children.add(parseComponentElement(element));
}
factory.addPropertyValue("children", children);
} }

最新文章

  1. 2013 ACM/ICPC 南京网络赛F题
  2. ASP.NET MVC Model验证总结【转】
  3. nth-of-type和nth-child的区别
  4. 0c-38-ARC快速入门
  5. EventHandler委托的使用
  6. UVa 11174 (乘法逆元) Stand in a Line
  7. IE 6/7下自赋值导致 overflow 溢出
  8. git 删除右键菜单
  9. IOS之【属性列表】
  10. [转载]OpenStack OVS GRE/VXLAN网络
  11. linux下svn命令大全(转)
  12. makemenuconfig学习
  13. PHP7 学习笔记(十二)gRPC
  14. 性能测试yslow
  15. Android ListView在增加HeaderView之后使用getLocationInWindow和getLocationOnScreen获得值不正确的解决方法
  16. RRDtool 安装和使用
  17. Toolbar 工具栏 菜单 标题栏 Menu
  18. Django的基本开发环境配置和MTV模型
  19. iOS - 组件化探究之私有库的创建
  20. JTAG接线描述

热门文章

  1. HttpServletRequest get
  2. 自学提高:JVM点滴
  3. Oracle普通视图和物化视图的区别
  4. Vue之状态管理(vuex)与接口调用
  5. JDK环境配置(Windows)
  6. [JSOI2008]Blue Mary开公司[李超线段树]
  7. 使用Sublime Text 3进行Markdown编辑+实时预览
  8. django restframeowrk filter,search,order
  9. RBAC权限管理系统
  10. 使用nuxt.js官方脚手架构建项目时ES6编译问题SyntaxError: Unexpected token import