深入理解:Spring框架IOC通过解析xml文件,创建对象的底层原理

news/2024/5/19 3:41:08 标签: java, spring, xml, ioc, 反射
xmlns="http://www.w3.org/2000/svg" style="display: none;">

一·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.测试结果如图:成功!!!
在这里插入图片描述


http://www.niftyadmin.cn/n/1031549.html

相关文章

New!Mono堆内存倒序调用分析——换个打开方式,解决效率大有不同!

UWA GOT (Online) 是UWA推出的性能优化工具&#xff08;Online功能限时免费中&#xff09;&#xff0c;它提供了总体性能分析、Mono堆内存分析和运行时资源检测三大功能。其中&#xff0c;Mono堆内存分析报告可以帮助大家快速洞悉Mono分配过大和过快的问题&#xff0c;并定位堆…

深入理解:js标签中的type=“text/JavaScript“,表示什么意思

一案例代码如下&#xff1a; <script type"text/javascript">function onchangeFun() {//注意函数名不能与已经存在的关键字相同&#xff0c;否则会出错&#xff01;alert("男神已经改变!")} </script>二type“text/javascript”&#xff0c;…

UWA正式支持Unreal 引擎!

随着游戏内容的日趋精品化和重度化&#xff0c;Unreal引擎逐渐走进国内开发商的视野并被使用&#xff0c;然而其高门槛的操作使用和项目本身的重度性也使得优化工作愈发复杂艰难。作为性能优化的服务商&#xff0c;UWA测评今天正式支持了Unreal 引擎开发的项目&#xff0c;帮助…

深入理解:Java中读取文件时,有时候使用 “/“(斜杠)分割目录,有时候使用 “.“(点)分割目录的问题

一问题描述&#xff1a; 1.Java中读取文件时&#xff0c;情况一&#xff1a;使用 “斜杠” 作为分隔符 2.Java中读取文件时&#xff0c;情况二&#xff1a;使用 “点” 作为分隔符 3.这两种路径表达的区别&#xff0c;以及他们分别使用的环境&#xff1f; 二解释&#xff1…

如何优化资源文件过多导致的安装变慢?

这是第129篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题&#xff0c;建议阅读时间10分钟&#xff0c;认真读完必有收获。 UWA 问答社区&#xff1a;answer.uwa4d.com UWA QQ群&#xff1a;465082844&#xff08;仅限技术交流&#xff09; 资源…

总结:如何将spring boot项目打包成war包,并部署在tomcat上运行

如何将spring boot项目打包成war包&#xff0c;并部署在tomcat上运行一修改打包方式&#xff1a;二移除spring boot自带的嵌入式tomcat插件&#xff1a;三添加servlet-api的依赖&#xff1a;若你整合了servlet程序&#xff0c;就需要导入依赖&#xff0c;以下三个任选一个&…

总结:如何将spring boot项目打包成jar包,并通过java -jar命令运行,浏览器也能成功访问

如何将spring boot项目打包成jar包&#xff0c;并通过java -jar命令执行一修改打包方式&#xff1a;二添加servlet-api的依赖&#xff1a;若你整合了servlet程序&#xff0c;就需要导入依赖&#xff0c;以下三个任选一个&#xff08;没有整合就可以跳过&#xff09;三添加jar包…

重装系统:利用微PE制作U盘为启动盘,重装win7旗舰版(win10等也一样)

利用微PE制作U盘为启动盘&#xff0c;重装win7旗舰版&#xff08;win10等也一样&#xff09;注意&#xff1a;如果是安装win10&#xff0c;推荐参考下面这个链接。&#xff08;利用微软官方U盘制作工具&#xff0c;制作系统启动U盘并重装win10系统&#xff09;一准备工作&#…