Spring IOC之 原理模拟
来源:互联网 发布:dcdc芯片 单片机 编辑:程序博客网 时间:2024/05/18 01:16
注:转载请标明出处,请尊重他人劳动成果。 http://greenyouyou.blog.163.com/blog/static/1383881472011820103155286/
IOC(Inversion Of Control)即控制反转,他是spring的核心机制,为什么叫控制反转了?因为在没有spring之前,对象的控制权可以说是由我们控制的,而使用spring之后,将对象的控制权交给了spring,交给了框架,所以就叫个控制反转(IOC)。
下面是我模拟Spring的控制反转机制的代码部分,其实不难,spring他要实现控制反转应该怎么做了?首先他应该读取配置文件中的配置,然后根据从配置文件中读到的类信息,利用反射技术去生成对象实例。我们读取配置文件使用的是dom4J技术。
publicclass ClassPathXMLApplicationContext {
private List<BeanDefinition>beanDefines =new ArrayList<BeanDefinition>();
private Map<String, Object>sigletons = new HashMap<String, Object>();
public ClassPathXMLApplicationContext(String filename){
this.readXML(filename);
this.instanceBeans();
}
/**
*完成bean的实例化
*/
privatevoid 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) {
e.printStackTrace();
}
}
}
/**
*读取xml配置文件
* @paramfilename
*/
privatevoid readXML(String filename) {
SAXReader saxReader =new SAXReader();
Document document=null;
try{
URL xmlpath =this.getClass().getClassLoader().getResource(filename);
document = saxReader.read(xmlpath);
Map<String,String> nsMap =new HashMap<String,String>();
nsMap.put("ns","http://www.springframework.org/schema/beans");//加入命名空间
XPath xsub = document.createXPath("//ns:beans/ns:bean");//创建beans/bean查询路径
xsub.setNamespaceURIs(nsMap);//设置命名空间
List<Element> beans = xsub.selectNodes(document);//获取文档下所有bean节点
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实例
* @parambeanName
* @return
*/
public Object getBean(String beanName){
returnthis.sigletons.get(beanName);
}
}
这是的BeanDefinition的定义:
publicclass BeanDefinition {
private Stringid;
private StringclassName;
public BeanDefinition(String id, String className) {
this.id = id;
this.className = className;
}
public String getId() {
returnid;
}
publicvoid setId(String id) {
this.id = id;
}
public String getClassName() {
returnclassName;
}
publicvoid setClassName(String className) {
this.className = className;
}
}
- Spring IOC之 原理模拟
- Spring IOC原理模拟
- spring ioc原理(模拟ioc原理代码)
- spring之ioc原理
- Spring之IoC原理
- spring IOC 实现原理模拟实现
- spring IOC 实现原理模拟实现
- spring IOC 实现原理模拟实现
- spring IOC 实现原理模拟实现
- Spring之IOC实现原理
- Spring之IOC原理详解
- spring之ioc底层原理
- Spring总结之IOC原理
- Spring 之 模拟Spring中的IOC
- Spring记录之模拟IoC(二)
- Spring记录之模拟IoC(一)
- Spring记录之模拟IoC(三)
- Spring学习一之IOC工作原理
- Java学习总结8——泛型2(不支持泛型数组)
- 机房收费系统——项目开发总结报告
- 初次整合Hibernate4和Spring4中出现的细节问题
- ubuntu 视频播放问题
- AndroidManifest.xml配置文件详解
- Spring IOC之 原理模拟
- jquery的remove跟empty的区别
- MIT:算法导论——10.平衡搜索树-红黑树
- void及void指针含义的深刻解析
- POJ 2117 Electricity(无向图割点)
- 机房收费系统——操作手册
- 设计模式之代理模式(Proxy)摘录
- 将某个Qt4项目升级到Qt5遇到的问题
- 【甘道夫】Hadoop2.2.0 NN HA详细配置+Client透明性试验【完整版】