版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37896194/article/details/82773344
一、创建一个标准的applicationContext.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<bean id="student" class="com.sunhui.IOCPrinciple.Student">
</bean>
</beans>
二、编写所需要类的代码
1、自定义Student类
package com.sunhui.IOCPrinciple;
public class Student {
public void show() {
System.out.println("I am a Student .");
}
}
2、自定义ClassPathXmlApplicationContext类
package com.sunhui.IOCPrinciple;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class ClassPathXmlApplicationContext implements BeanFactory{
Map<String, Object>beanMap=new HashMap<String, Object>();
public ClassPathXmlApplicationContext(String name)throws Exception{
//创建一个saxReader
SAXReader saxReader = new SAXReader();
//读取xml文件
Document doc = saxReader.read(this.getClass().getClassLoader().getResourceAsStream(name));
//获取根结点,我这里是beans
Element root = doc.getRootElement();
System.out.println("root element: " + root.getName());
List childList = root.elements();
System.out.println(childList.size());
//获取bean结点
Element beanList=root.element("bean");
//获取bean结点的class里面的内容并且实例这个路径下的bean
Object clazz=Class.forName(beanList.attributeValue("class")).newInstance();
//将bean对象放进map中
beanMap.put(beanList.attributeValue("id"), clazz);
System.out.println(beanList);
}
public Object getBean(String id) {
return beanMap;
}
}
3、自定义BeanFactory类
package com.sunhui.IOCPrinciple;
public interface BeanFactory {
Object getBean(String id);
}
三、测试类IOCTest
package com.sunhui.IOCPrinciple;
import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
public class IOCTest {
@Test
public void iocTest() throws Exception {
BeanFactory bf= new ClassPathXmlApplicationContext("applicationContext.xml");
Student s = (Student) bf.getBean("student");
s.show();
}
}
注意:
1、Class clazz = Class.forName("类的权限定名"); //返回值的类型是Class类型
2、clazz.newInstance(); //创建Class类型的实例对象