1.先导入依赖
<!--引入dom4J-->
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
工厂类
package com.studay.factory;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* ClassName: MyBeanFactory <br/>
* Description: <br/>
*创建自己的工厂类
* @author lp <br/>
*/
public class MyBeanFactory {
//创建一个map集合,模拟IOC容器
private static Map<String,Object> map = new HashMap<String, Object>();
static{
try{
//使用dom4j 解析xml文件
//第一步 :获得一个解析器
SAXReader saxReader = new SAXReader();
//第二步:读取外部的配置文件
String path = "src/main/resources/applicationContext.xml";
//第三步:读取整个文档对象
Document document = saxReader.read(path);
//第四步:获取根节点
Element rootElement = document.getRootElement();
//第五步:获取根节点下的所有bean 标签对应的节点:
List<Element> beans = rootElement.elements("bean");//bean
//第六步 :
for (Element bean : beans){
//获取id属性对应的值
String id = bean.attributeValue("id");
//获取class属性对应的值:【全限定类名】
String aClass = bean.attributeValue("class");
//通过反射创建对象
Class<?> clz = Class.forName(aClass);
//创建对象
Object o = clz.newInstance();
//存容器 id做key值,创建出来的对象为value值
map.put(id,o);
}
}catch (Exception e){
e.printStackTrace();
}
}
/**
* 根据id从容器当中获得对象
*@param id id的名称
*@return 返回object类型的对象
*/
public static Object getBean(String id){
return map.get(id);
}
}
测试类
@Test
public void test1(){
//1.获取ioc容器对象
MyBeanFactory myBeanFactory = new MyBeanFactory();
//2.从容器获取bean对象
User user = (User)myBeanFactory.getBean("user");
user.say();
}