为了简单的回顾我们的反射机制,下面我们举行一个简单的任务。完成下面的需求
- 调用的是哪个对象的
- 哪个方法
- 该方法传什么参数
- 有无返回值,有返回值的话,又该返回什么值
首先你知道以下这几条信息复制代码
- 假设你现在以下信息:
- 1.有这样一个类,类名叫做:com.rainbowsea.reflect.User
- 2.这个类符合javabean规范,属性私有化,对外提供公开的setter和getter方法。
- 3.你还知道这个类当中有一个属性,属性的名字叫做 age
- 4.并且你还知道age属性的类型是 int 类型
- 请使用反射机制调用set()方法,给 User 对象的age 属性赋值(age 属性赋值为 20 )
首先我们需要,获取到一个名为 SAXReader(这是dom4j 剖析xml 文件的核心对象) 的对象以及Document ,用来读取我们当中的myspring.xml'所含的 bean 的配置信息。这两个对象可以读取到 xml 配置文件的信息。
同时需要:注意的是:在 java 当中一个 ”//“ 才体现为一个 / 。
注意一个向下转型:向下转型的目标是为了使用Element接口更加丰富的方法。
该 Element 可以获取到 标签当中的 id 的属性值,和 标签当中的 class 属性的值
我们需要,再次重新把所有的 Bean 标签遍历一次,这一次重要是给对象属性赋值的
获取到 获取该标签下的所有的属性为 标签,由于 在 标签当中存放着,我们对属性赋值要的确切的值。
赋值,这里我们是通过 set 方法举行赋值的,这个简单,我们可以通过反射(对象,方法名,方法参数类型)获取到方法的对象,又可以通过属性名,获取到属性的类型。
这里最难的部分就是,在我们的 在 标签当中存放着,我们对属性赋值要的确切的值。但是这个值有两种:简单类型 value 的值,复杂类型 ref 的值。复杂类型就是引用类型,这个我们以及在曝光的时候,就存储到Map当中去了,我们只需要通过对应的beanName 从 Map当前取出来,再通过反射机制调用set方法举行一个赋值。
简单类型的赋值操纵:完备代码:
简单类型的复杂点,就是一个转换,我们再 myspring.xml 配置文件当中的,属性值都是以字符串的形式存在的,而我们的现实属性的类型,大概是 int,char,double 等等类型的,String 字符串类型不可以直接赋值到其他 int,char 类型当中去,所以我们就需要对我们所赋值的属性举行一个判断,假如该类型是 int 类型,我们就需要将 String 字符串类型转换为我们所需要的 int 类型。
这里我们分析一下:复制代码
- 我们myspring框架说明以下,我们只支持这些类型为简单类型
- byte short int long float double boolean char
- Byte Short Intger Long Float Double Boolean Character
- String
- */
5. 最后:
- 框架一样平常是由 设计模式+注解+反射 来实现,并举行运用开发的。而这里我们的Spring IoC容器的实现原理:工厂模式 + 剖析XML + 反射机制。
- 我们知道,想要调用一个方法,就需要明确知道该方法的四个要素:
- 调用的是哪个对象的
- 哪个方法
- 该方法传什么参数
- 有无返回值,有返回值的话,又该返回什么值
- 引入 dom4j 和 jaxen的依赖,由于要使用它剖析XML文件, SAXReader(这是dom4j 剖析xml 文件的核心对象) 的对象以及Document ,用来读取我们当中的myspring.xml'所含的 bean 的配置信息。这两个对象可以读取到 xml 配置文件的信息。
- 编写Spring 框架比较难的点,就是:简单类型的复杂点,就是一个转换,我们再 myspring.xml 配置文件当中的,属性值都是以字符串的形式存在的,而我们的现实属性的类型,大概是 int,char,double 等等类型的,String 字符串类型不可以直接赋值到其他 int,char 类型当中去,所以我们就需要对我们所赋值的属性举行一个判断,假如该类型是 int 类型,我们就需要将 String 字符串类型转换为我们所需要的 int 类型。
- 注意:我们手写的Spring 框架不并不是完完全全按照,真正的Spring框架来编写的,这是大部分思路是一致的,对应差别需要上的处理大概不太一致,这一点希望大家可以明白。
- 我们手写Spring 框架是为了,更好的理解Spring 框架的原理,从而不惧怕Spring的使用,在使用上更加的机动,得心易手。
“在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继承在其他的领域奋斗。感谢你们,我们总会在某个时刻再次相遇。”
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |