Spring容器内部的实现机制
来源:互联网 发布:阿里云开发者平台 编辑:程序博客网 时间:2024/06/10 03:54
class BeanDefinition 中保存着bean的id和class
class ClassPathXMLApplicationContext 模仿了ApplicationContext 的功能 先读取文件,将文件中的bean保存在List集合中 实例化时,将bean拿到Map中,根据传进来的beanName 来使用那个bean
//用来存放bean的信息
private List<BeanDefinition> BeanDefines = new ArrayList<BeanDefinition>();
//保存bean
private Map<String ,Object > sigletons =new HashMap<String, Object>();
public ClassPathXMLApplicationContext(String fileName){
this.readXML(fileName);
this.instanceBeans();
}
//完成bean的实例化
private void instanceBeans() {
for(BeanDefinition beanDefinition:BeanDefines){
try {
if(beanDefinition.getClassName()!=null && !"".equals(beanDefinition.getClassName().trim()))
sigletons.put(beanDefinition.getId(),Class.forName(beanDefinition.getClassName()).newInstance());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//读取application.xml 文件
private void readXML(String fileName) {
SAXReader saxReader = new SAXReader();
Document document =null;
try{
URL xmlPath=this.getClass().getClassLoader().getResource(fileName);
//System.out.println(xmlPath);file:/G:/workspaces1/spring/bin/beans.xml
document =saxReader.read(xmlPath);
Map<String,String> nsMap=new HashMap<String, String>();
//加入命名空间
nsMap.put("ns","http://www.springframework.org/schema/beans");
//创建beans/bean的查询路径
XPath xsub = document.createXPath("//ns:beans/ns:bean");
//System.out.println(xsub);[XPath: /descendant-or-self::node()/child::ns:beans/child::ns:bean]
//设置命名空间
xsub.setNamespaceURIs(nsMap);
//获取文档下的所有的bean节点
List<Element> beans = xsub.selectNodes(document);
for (Element element : beans) {
String id =element.attributeValue("id");//获取id属性值
String clazz = element.attributeValue("class");//获取class属性值
BeanDefinition beanDefine =new BeanDefinition(id, clazz);
BeanDefines.add(beanDefine);
}
}catch(Exception e){
e.printStackTrace();
}
}
//获取bean实例
public Object getBean(String beanName){
return this.sigletons.get(beanName);
}
- Spring容器内部的实现机制
- spring 容器 内部工作机制
- spring容器的事件机制
- (spring-第5回【IoC基础篇】)spring容器从加载配置文件到实例化bean的内部工作机制
- hashmap的内部实现机制
- HashMap的内部实现机制
- HashMap的内部实现-容器深入研究
- 模拟Spring的内部实现
- spring内部机制
- spring---容器内部事件发布
- Spring IOC容器的实现
- Spring的IoC容器实现
- Spring之容器的实现
- AsnycTask的内部的实现机制
- jsp/servlet/struts/hibernate/spring内部实现机制
- jsp/servlet/struts/hibernate/spring内部实现机制
- jsp/servlet/struts/hibernate/spring内部实现机制
- jsp/servlet/struts/hibernate/spring内部实现机制
- 甲方和乙方
- Android数据存储之SharedPreferences
- c++哈夫曼树(简单创建,与遍历)
- 将文件存入SDCard
- 演讲的魅力
- Spring容器内部的实现机制
- 编程
- ACM STL容器和算法
- Bypass XSS filters using data URIs
- Appweb 4.1.0 的移植问题
- 《嵌入式可配置实时操作系统eCos开发与应用》第2版 配套光盘 资料下载
- C语言struct关键字详解—结构体
- nginx启动,重启,关闭命令
- Photoshop实用技巧:怎样改变一寸照片的背景颜色