一·IOC底层原理架构图如下:
二·spring框架的底层是如何解析xml文件,从而创建相应对象的呢?
本人接下来,通过案例演示说明
1.先创建一个spring项目,并导入一个dom4j的jar包,用于解析xml文件。
(或者利用maven创建一个spring项目,但是也要导入spring框架依赖)
2.创建一个UserDaoImpl类,具体如下:
3.创建一个空类:Mss类
4.创建一个spring配置文件(test_2.xml 文件),并在里面添加,刚刚创建两个类的bean管理。
5.在Mss类中添加如下测试方法:
java">@Test
public void test1() throws Exception {
//先创建一个 SAXReader 对象,用于读取xml文件
SAXReader reader=new SAXReader();
//调用read方法,读取需要解析的xml文件,通过url路径,获取一个Document对象
Document document = reader.read("src/com/lmf/spring5/test_2.xml");
//可以通过输出看看有没有测试成功
// System.out.println(document);
//通过Document对象获取spring配置文件的根元素对象
Element rootElement = document.getRootElement();
//可以输出看看
// System.out.println(rootElement.asXML());
//再通过根元素调用elements方法,获取根元素下面所有的子元素集合
List<Element> beans = rootElement.elements("bean");
//可以遍历输出看看
// for (Element bean : beans) {
// System.out.println(bean);
// }
//获取spring配置文件中“UserDaoImpl”类的路径;即,根元素下面第一个子元素userDao的class属性值
String value = beans.get(0).attributeValue("class");
//再通过Class类的静态forName方法,加载UserDaoImpl类的字节码文件
Class clazz = Class.forName(value);
//UserDaoImpl类的字节码文件,再通过反射,获取它的构造函数的类,这里是无参构造函数类
Constructor cons = clazz.getConstructor();
//通过构造函数类,创建一个新的实例,并强制转换类型为UserDaoImpl类型
UserDaoImpl userDao =(UserDaoImpl) cons.newInstance();
//调用UserDaoImpl类的方法
int add = userDao.add(35, 5);
//输出结果测试
System.out.println(add);
}
6.测试结果如图:成功!!!