为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

Java反射机制

2017-09-20 4页 doc 16KB 12阅读

用户头像

is_833902

暂无简介

举报
Java反射机制Java反射机制 反射机制实现DI 1. IOC(Inversion of Control)模式与DI(Dependency Injection)方式 IOC模式称为反转控制,其意义在于将编写好的类交给容器去控制,而并不需要在类内部控制。 IOC模式是解决调用者和被调用者之间的一种关系,将被调用者名称写入了调用者的代码中,产生了一个接口实现的原罪:彼此联系,调用者和被调用者有紧密联系,在UML中是用依赖 Dependency 表示。 IOC模式极大的降低了组件的耦合度降低,提高了组件的可移植性。其将类与类之间的紧密关...
Java反射机制
Java反射机制 反射机制实现DI 1. IOC(Inversion of Control)模式与DI(Dependency Injection)方式 IOC模式称为反转控制,其意义在于将编写好的类交给容器去控制,而并不需要在类内部控制。 IOC模式是解决调用者和被调用者之间的一种关系,将被调用者名称写入了调用者的代码中,产生了一个接口实现的原罪:彼此联系,调用者和被调用者有紧密联系,在UML中是用依赖 Dependency 表示。 IOC模式极大的降低了组件的耦合度降低,提高了组件的可移植性。其将类与类之间的紧密关系转化为调用着与被调用着之间的关系,使关系和具体的类无关。 IOC模式的思想由Martin Fowler的一篇《Inversion of Control Containers and the Dependency Injection patt ern》提出。 DI方式称为依赖注入,其意义在于把组件所依赖的零部件给组件安装上去,DI方式需要有个图纸(参照),通常是xml格式或者properties格式的配置文档。 DI方式是IOC模式的一种实现,DI方式是以注入的形式实现IOC模式的,而IOC模式也不只有DI一种形式,还有一种常见的方式是“Dependency Lookup”,即每个组件自己去查找自己所需要的。因此IOC并不等同于 DI。 2. 反射机制 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。 这个机制允许程序在运行时透过Reflection APIs取得任何一个已知名称的class的内部信息,包括其modifiers(诸如public, static 等等)、superclass(例如Object)、实现之interfaces(例如Cloneable),也包括fields和methods的所有信息,并可于运行时改变fields内容或唤起methods。 3. 实现简单的DI 实现DI通过使用JAVA提供的java.lang.class及java.lang.reflect两个包来实现。 java.lang.class提供了获取类的方法,而java.lang.reflect提供了对类的构造函数、字段和方法的调用,下面分述这些方法的使用: 调用构造函数: package com.telestone.di; import java.lang.reflect.Constructor; Class StringClass = Class.forName( "java.lang.String "); //通过类名来获得这个类 //下面用反射机制调用其构造函数来构造一个实例 //在构造是有2种方式:当构造函数有参数时,需要构造时携带参数。参数为空的构造函数。 String stringValue = “ditest”; Object StringObject = null; Constructor constructors[]=StringClass .getConstructors(); //将StringClass的全部构造函数放入Constructor数组中 //循环查找是否有以String类为参数的构造函数. int i = 0; int constructorLength = constructors.length; Class[] parameterTypes; while(i < constructorLength)...{ parameterTypes = constructors[i].getParameterTypes(); //获取第i个构造函数中的全部构造参量 if ((parameterTypes.length == 1 && parameterTypes[0] == Stri ng.class)) //使用String类型为构造参量的构造函数所以在构造参量中只有一个,并且类型为String型 break; i++; } //若存在则用String类为参数进行构造不是的话则用空实现构造.若没有空实现则抛出无可实现构造函数. if (i < constructorLength) StringObject = constructors[i].newInstance(stringValue); //使用预先设置的String值来构造该函数 else StringObject = StringClass .newInstance(); //这种方法只能构造空参数构造函数 调用字段(属性): //获取StringObject的全部字段 java.lang.reflect.Field fields[]= StringObject.getClass().getDeclaredFields(); //获取StringObject的指定字段 java.lang.reflect.Field field= StringObject.getClass().getDeclaredField( "/*字段名称*/ "); //将字段设置值 field.set(StringObject, typeClass); 方法调用: //获取StringObject的全部方法 java.lang.reflect.Method methods[] = StringObject.getClass().getDeclaredMeth ods(); //获取StringObject的指定方法 java.lang.reflect.Method method = StringObject.getClass().getDeclaredMethod (concat,String.getClass()); //将字段设置值 method.invoke(StringObject, "concatvalue "); 总结:简单讲述了用Java反射机制实现DI方式的方法,一般执行的步骤如下: Step1: 通过类名获得类对象 Step2: 获得我们想要的构造方法对象 Step3: 调用构造方法,创建对象 Step4: 获得想要调用的方法对象或者字段 Step5: 对创建好的对象调用指定的方法或者字段
/
本文档为【Java反射机制】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索