Spring中IOC用到的反射机制
来源:互联网 发布:编程图片素材 编辑:程序博客网 时间:2024/04/29 17:46
IOC:即“控制反转”,不是什么技术,而是一种思想。使用IOC意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。
本篇文章主要讲解一下IOC底层实现的原理(反射),Bean容器的实现,就不对IOC的概念进行详述了。
在Spring的配置文件中,经常看到如下配置:
<bean id="courseDao" class="com.qcjy.learning.Dao.impl.CourseDaoImpl"></bean>那么通过这样配置,Spring是怎么帮我们实例化对象,并且放到容器中去了了?对,就是通过反射!!!
下面是Spring通过配置进行实例化对象,并放到容器中的伪代码:
//解析<bean .../>元素的id属性得到该字符串值为“courseDao” String idStr = "courseDao"; //解析<bean .../>元素的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的配置如下所示:
<bean id="courseService" class="com.qcjy.learning.service.impl.CourseServiceImpl"> <!-- 控制调用setCourseDao()方法,将容器中的courseDao bean作为传入参数 --> <property name="courseDao" ref="courseDao"></property> </bean>我们继续用伪代码的形式来模拟实现一下Spring底层处理原理:
//解析<property .../>元素的name属性得到该字符串值为“courseDao” String nameStr = "courseDao"; //解析<property .../>元素的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的反射机制。
阅读全文
0 0
- Spring中IOC用到的反射机制
- java spring Ioc(反射)机制
- spring的ioc原理(java反射机制)
- 利用java反射机制模拟spring IOC原理的实现
- spring的ioc机制
- Spring的IOC机制
- 利用反射机制模拟SPRING IOC实现
- Java反射机制模拟Spring IOC容器
- Spring IOC原理之Java反射机制
- java反射机制模拟Spring Ioc实现
- Spring IOC原理之Java反射机制
- Spring IOC原理之Java反射机制
- Spring IOC原理之Java反射机制
- java反射机制(三)---java的反射和代理实现IOC模式 模拟spring
- 【Spring】Spring的IOC(控制反转)/DI(依赖注入)原理(一):用到“反射”编程
- Spring实例-通过Java的反射机制和spring IOC初始化JavaBean
- 在android用到的反射机制。
- spring的DI/IOC机制
- 数据库中的一张表映射成一个javabean文件时的注意事项是什么?
- 【LeetCode】C# 26、Remove Duplicates from Sorted Array
- DBCP实现连接池
- 定义一个圆类(Circle),其所在的包为bzu.info.software;定义一个圆柱类Cylinder,其所在的包为bzu.info.com;定义一个主类A,其所在的包也为bzu.info.
- PHP的特定类型的测试函数
- Spring中IOC用到的反射机制
- STK卫星工具箱下载
- 机器学习scikit-learn入门教程
- 练习 1-14 编写一个程序,打印输入中各个字符出现频度的直方图
- Linux下的虚拟地址映射详解(二)线性地址到物理地址的映射
- JAVA之StringBuilder类
- Pandas+groupby用法讲解
- java鬼混笔记:lucene 9、查询结果高亮
- 使用 Python爬取龙珠超下载链接地址