博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java反射机制在Spring IOC中的应用
阅读量:5754 次
发布时间:2019-06-18

本文共 1372 字,大约阅读时间需要 4 分钟。

IOC:即“控制反转”,不是什么技术,而是一种思想。使用IOC意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。

本篇文章主要讲解一下IOC底层实现的原理(反射),Bean容器的实现,就不对IOC的概念进行详述了。

在Spring的配置文件中,经常看到如下配置:

 那么通过这样配置,Spring是怎么帮我们实例化对象,并且放到容器中去了了?对,就是通过反射!!!

下面是Spring通过配置进行实例化对象,并放到容器中的伪代码:

//解析
元素的id属性得到该字符串值为“courseDao”String idStr = "courseDao";//解析
元素的class属性得到该字符串值为“com.qcjy.learning.Dao.impl.CourseDaoImpl”String classStr = "com.qcjy.learning.Dao.impl.CourseDaoImpl";//利用反射知识,通过classStr获取Class类对象Class
cls = Class.forName(classStr);//实例化对象Object obj = cls.newInstance();//container表示Spring容器container.put(idStr, obj);

 通过解析xml文件,获取到id属性和class属性里面的内容,利用反射原理获取到配置里面类的实例对象,存入到Spring的bean容器中。

当一个类里面需要应用另一类的对象时,Spring的配置如下所示:

     
     

 我们继续用伪代码的形式来模拟实现一下Spring底层处理原理:

//解析
元素的name属性得到该字符串值为“courseDao”String nameStr = "courseDao";//解析
元素的ref属性得到该字符串值为“courseDao”String refStr = "courseDao";//生成将要调用setter方法名String setterName = "set" + nameStr.substring(0, 1).toUpperCase() + nameStr.substring(1);//获取spring容器中名为refStr的Bean,该Bean将会作为传入参数Object paramBean = container.get(refStr);//获取setter方法的Method类,此处的cls是刚才反射代码得到的Class对象Method setter = cls.getMethod(setterName, paramBean.getClass());//调用invoke()方法,此处的obj是刚才反射代码得到的Object对象setter.invoke(obj, paramBean);

 

通过上面对Spring底层原理的分析,可以发现,其实并不难,用到的都是反射机制,通过反射实例化对象,存入到Spring的bean容器中。

只要在代码或配置文件中看到类的完整路径(包.类),其底层原理基本上使用的就是Java的反射机制。

转载地址:http://rgdkx.baihongyu.com/

你可能感兴趣的文章
Mysql索引原理浅析
查看>>
offsetWidth,clientWidth,width,scrollWidth之间的区别
查看>>
生辰八字取名的方法
查看>>
圆角输入框”背景“
查看>>
Linux基础(day43)
查看>>
LNMP架构介绍、MySQL安装、PHP安装与Nginx介绍
查看>>
Day28 awk工具讲解
查看>>
Spring配置补充
查看>>
Servlet 3.0 新特性 无 web.xml配置
查看>>
大数据安全之Hadoop生态圈背后不可忽视的隐藏“凶险”
查看>>
VCF比对工具的安装及使用
查看>>
Idea Spring boot webmvc Thymeleaf namespace not found
查看>>
最简单的docker教程:在docker里运行nginx服务器
查看>>
区块链100讲:总被提起的拜占庭问题到底是什么鬼?
查看>>
48小时区块链黑客马拉松(成都)
查看>>
“零确认”有望助力BCH得到广泛应用
查看>>
Firefox浏览器xpath工具插件(高版本Firefox不支持)
查看>>
免费的容器架构可视化工具 | 阿里云应用高可用服务 AHAS 发布重大新特性
查看>>
画图工具->processon
查看>>
select、input等默认样式的改变,包含下拉三角
查看>>