dom4j解析Spring-Config.xml配置文件的底层代码实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 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类型的实例对象

猜你喜欢

转载自blog.csdn.net/qq_37896194/article/details/82773344