Spring解析xml理解
Sprign解析xml配置使用dom4j.
第一步:获取Document
public class DocumentHelper{
//声明map存放节点
private Map<String, Document> docs = new HashMap<String, Document>();
public Document getDocument(String filePath) {
//用HashMap先根据路径获取文档
Document doc=this.docs.get(filePath);
if (doc==null) {
//dom4j的解析得到doc
…
this.docs.put(filePath, doc); //如果为空,把路径和文档放进去
}
return this.docs.get(filePath);
}
}
第二步:获取Element
public class ElementHelper{
//声明map存放节点
private Map<String, Element> elements=new HashMap<String, Element>();
//往集合增加元素
public void addElements(Document doc) {
//获取document的elements节点,并且放入集合中
…
}
//获取集合元素
public Element getElement(String id) {
return elements.get(id);
}
//获取所有的元素
Collection<Element> getElements(){…}
}
第三步:Bean的创造
public class BeanCreatorHelper{
//空构造器
public Object createBeanUseDefaultConstruct(String className) {
return = Class.forName(className).newInstance();
}
//执行方法
…
//其他set方法还原等等
…
}
第四步:applicationContext简单实现
public class ApplicationContextHelper {
protected ElementHelper elementHelper = new ElementHelper();
protected Map<String, Object> beans = new HashMap<String, Object>();
//获取具体的对象实例,也是我们使用Spring框架中用的最多的一个方法
public Object getBean(String id) {
Object bean = this.beans.get(id);
if (bean == null) {
//1、获取到配置文件中的节点
Element e = elementHelper.getElement(id);
//2、通过bean创造器BeanCreatorHelper,通过反射机制获得对象,并且放到map集合中。
...
}
return bean;
}
总结
从Document的创造,再到Element的创建,再到解析Element,到applicationContext的实现。这一过程在编码中是按照顺序进行的,是不可逆的。真正的代码结构远比我上面提到的要复杂的很多。比如applicationContextHelper中,还有其他的自动注入方法等等,需要更深入的了解。
485 声望
14 粉丝
推荐阅读
Java12的新特性
Java语言特性系列Java5的新特性Java6的新特性Java7的新特性Java8的新特性Java9的新特性Java10的新特性Java11的新特性Java12的新特性Java13的新特性Java14的新特性Java15的新特性Java16的新特性Java17的新特性Java...
codecraft赞 63阅读 12.7k
Java8的新特性
Java语言特性系列Java5的新特性Java6的新特性Java7的新特性Java8的新特性Java9的新特性Java10的新特性Java11的新特性Java12的新特性Java13的新特性Java14的新特性Java15的新特性Java16的新特性Java17的新特性Java...
codecraft赞 32阅读 27.4k评论 1
一文彻底搞懂加密、数字签名和数字证书!
微信搜索🔍「编程指北」,关注这个写干货的程序员,回复「资源」,即可获取后台开发学习路线和书籍来源:个人CS学习网站:[链接]前言这本是 2020 年一个平平无奇的周末,小北在家里刷着 B 站,看着喜欢的 up 主视...
编程指北赞 71阅读 33.4k评论 20
Java11的新特性
Java语言特性系列Java5的新特性Java6的新特性Java7的新特性Java8的新特性Java9的新特性Java10的新特性Java11的新特性Java12的新特性Java13的新特性Java14的新特性Java15的新特性Java16的新特性Java17的新特性Java...
codecraft赞 28阅读 19.2k评论 3
Java5的新特性
Java语言特性系列Java5的新特性Java6的新特性Java7的新特性Java8的新特性Java9的新特性Java10的新特性Java11的新特性Java12的新特性Java13的新特性Java14的新特性Java15的新特性Java16的新特性Java17的新特性Java...
codecraft赞 13阅读 21.7k
Java9的新特性
Java语言特性系列Java5的新特性Java6的新特性Java7的新特性Java8的新特性Java9的新特性Java10的新特性Java11的新特性Java12的新特性Java13的新特性Java14的新特性Java15的新特性Java16的新特性Java17的新特性Java...
codecraft赞 20阅读 15.3k
Java13的新特性
Java语言特性系列Java5的新特性Java6的新特性Java7的新特性Java8的新特性Java9的新特性Java10的新特性Java11的新特性Java12的新特性Java13的新特性Java14的新特性Java15的新特性Java16的新特性Java17的新特性Java...
codecraft赞 17阅读 11.1k
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。