spring ioc的简单实现
来源:互联网 发布:制作动态图片的软件 编辑:程序博客网 时间:2024/05/01 02:05
spring ioc的原理就是通过解析xml文件,然后通过反射机制创建我们所需要的类的实例,这些实例放在一个“”容器“”中
测试xml文件如下:
<?xml version="1.0" encoding="UTF-8"?><beans> <bean id="son" class="com.zwk.ioc.Son"/> <bean id="father" class="com.zwk.ioc.Father"> <property name="son" ref="son"/> </bean></beans>
解析xml文件的类如下,使用DOM解析来解析xml文件
import java.lang.reflect.Method;import java.util.HashMap;import java.util.Map;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.NodeList;public class ClassPathXmlApplicationContext {private Map<String,Object> beanFactory=new HashMap<String,Object>();public ClassPathXmlApplicationContext(String path)throws Exception{DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();DocumentBuilder builder=factory.newDocumentBuilder();Document document=builder.parse(path);NodeList beans=document.getElementsByTagName("bean");Element element;String id;String clazz;Object obj;Element property;String name;String ref;for(int i=0;i<beans.getLength();i++){element=(Element) beans.item(i);id=element.getAttribute("id");clazz=element.getAttribute("class");obj=Class.forName(clazz).newInstance();beanFactory.put(id, obj);NodeList childNodes=element.getChildNodes();for(int j=0;j<childNodes.getLength();j++){property=(Element) childNodes.item(i);name=property.getAttribute("name");ref=property.getAttribute("ref");String methodName = "set" + name.substring(0, 1).toUpperCase() + name.substring(1); // 反射机制对方法进行调用,将对象在加载bean时就注入到环境上下文中 Method m = obj.getClass().getMethod(methodName, this.getBean(ref).getClass()); // 执行注入,相当于执行了一个setXXX()的方法 m.invoke(obj, this.getBean(ref));}}}public Object getBean(String id){return beanFactory.get(id);}}
基本的javabean如下
public class Son {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}}public class Father { private String name; private Son son; public String getName() { return name; } public void setName(String name) { this.name = name; } public Son getSon() { return son; } public void setSon(Son son) { this.son = son; }}测试代码如下:
public class Test {public static void main(String[] args) throws Exception {ClassPathXmlApplicationContext beans=new ClassPathXmlApplicationContext("src/beans.xml");System.out.println(beans.getBean("son"));System.out.println(((Father)beans.getBean("father")).getSon());}}
0 0
- spring ioc的简单实现
- spring Ioc 简单实现
- Spring 简单IOC实现
- 自己实现简单的Spring IOC
- Spring的Ioc容器简单实现
- 自己简单实现Spring的IOC原理
- Spring-IOC简单原理 + 实现
- 自己实现简单Spring Ioc
- 自己简单实现Spring Ioc
- Spring IOC的实现
- ioc的简单实现
- 模拟spring - 简单实现spring IOC
- Spring之IOC思想的理解和简单实现
- Spring IOC的简单实现(附demo)
- Spring之IOC思想的理解和简单实现
- Spring的IOC简单实例
- 简单的spring ioc例子
- 简单模拟 Spring 的 ioc
- HTML+CSS学习笔记(一)
- ant使用指南
- service的基本用法+远程服务
- jeb 2 python scripts api skeleton
- Hive SQL的编译过程
- spring ioc的简单实现
- 【动态规划】守护者的挑战
- jvm体系结构-方法区详解
- 当printf遇上多线程
- 网易笔试题--混合颜色(异或)
- 列表框数据显示
- HTML-图像
- linux awk命令详解
- JAVA内存溢出解析