天河建设网站多少钱,建站哪家好就要用兴田德润,各大门户网站,合肥做网站价格是多少文章目录何为反射#xff1f;反射的应用场景了解么#xff1f;谈谈反射机制的优缺点优点缺点反射实战获取 Class 对象的四种方式1. 知道具体类的情况下可以使用TargetObject.class#xff1a;2. 通过 Class.forName()传入类的全路径获取#xff1a;3. 通过对象实例instance…
文章目录何为反射反射的应用场景了解么谈谈反射机制的优缺点优点缺点反射实战获取 Class 对象的四种方式1. 知道具体类的情况下可以使用TargetObject.class2. 通过 Class.forName()传入类的全路径获取3. 通过对象实例instance.getClass()获取4. 通过类加载器xxxClassLoader.loadClass()传入类路径获取:反射的一些基本操作何为反射
如果说大家研究过框架的底层原理或者咱们自己写过框架的话一定对反射这个概念不陌生。
反射之所以被称为框架的灵魂主要是因为它赋予了我们在运行时分析类以及执行类中方法的能力。
通过反射你可以获取任意一个类的所有属性和方法你还可以调用这些方法和属性。
反射的应用场景了解么
像咱们平时大部分时候都是在写业务代码很少会接触到直接使用反射机制的场景。
但是这并不代表反射没有用。相反正是因为反射你才能这么轻松地使用各种框架。像 Spring/Spring Boot、MyBatis 等等框架中都大量使用了反射机制。
这些框架中也大量使用了动态代理而动态代理的实现也依赖反射。
比如下面是通过 JDK 实现动态代理的示例代码其中就使用了反射类 Method 来调用指定的方法。
另外像 Java 中的一大利器 注解 的实现也用到了反射。
为什么你使用 Spring 的时候 一个Component注解就声明了一个类为 Spring Bean 呢为什么你通过一个 Value注解就读取到配置文件中的值呢究竟是怎么起作用的呢
这些都是因为你可以基于反射分析类然后获取到类/属性/方法/方法的参数上的注解。你获取到注解之后就可以做进一步的处理。
谈谈反射机制的优缺点
优点
可以让咱们的代码更加灵活、为各种框架提供开箱即用的功能提供了便利
缺点
让我们在运行时有了分析操作类的能力这同样也增加了安全问题。比如可以无视泛型参数的安全检查泛型参数的安全检查发生在编译时。另外反射的性能也要稍差点不过对于框架来说实际是影响不大的。
反射实战
获取 Class 对象的四种方式
如果我们动态获取到这些信息我们需要依靠 Class 对象。Class 类对象将一个类的方法、变量等信息告诉运行的程序。Java 提供了四种方式获取 Class 对象:
1. 知道具体类的情况下可以使用TargetObject.class
Class alunbarClass TargetObject.class;但是我们一般是不知道具体类的基本都是通过遍历包下面的类来获取 Class 对象通过此方式获取 Class 对象不会进行初始化
2. 通过 Class.forName()传入类的全路径获取
Class alunbarClass1 Class.forName(“com.zxn.TargetObject”); Copy to clipboardErrorCopied
3. 通过对象实例instance.getClass()获取
TargetObject o new TargetObject();
Class alunbarClass2 o.getClass();4. 通过类加载器xxxClassLoader.loadClass()传入类路径获取:
ClassLoader.getSystemClassLoader().loadClass(com.zxn.TargetObject);通过类加载器获取 Class 对象不会进行初始化意味着不进行包括初始化等一系列步骤静态代码块和静态对象不会得到执行
反射的一些基本操作
1、创建一个我们要使用反射操作的类 TargetObject。 package com.zxn;public class TargetObject {private String value;public TargetObject() {value JavaGuide;}public void publicMethod(String s) {System.out.println(I love s);}private void privateMethod() {System.out.println(value is value);}
}
2、使用反射操作这个类的方法以及参数
package com.zxn;import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;public class Main {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InstantiationException, InvocationTargetException, NoSuchFieldException {/*** 获取 TargetObject 类的 Class 对象并且创建 TargetObject 类实例*/Class? targetClass Class.forName(com.zxn.TargetObject);TargetObject targetObject (TargetObject) targetClass.newInstance();/*** 获取 TargetObject 类中定义的所有方法*/Method[] methods targetClass.getDeclaredMethods();for (Method method : methods) {System.out.println(method.getName());}/*** 获取指定方法并调用*/Method publicMethod targetClass.getDeclaredMethod(publicMethod,String.class);publicMethod.invoke(targetObject, ZXN);/*** 获取指定参数并对参数进行修改*/Field field targetClass.getDeclaredField(value);//为了对类中的参数进行修改我们取消安全检查field.setAccessible(true);field.set(targetObject, JavaGuide);/*** 调用 private 方法*/Method privateMethod targetClass.getDeclaredMethod(privateMethod);//为了调用private方法我们取消安全检查privateMethod.setAccessible(true);privateMethod.invoke(targetObject);}
} 文章转载自: http://www.morning.lwqst.cn.gov.cn.lwqst.cn http://www.morning.bwznl.cn.gov.cn.bwznl.cn http://www.morning.gwyml.cn.gov.cn.gwyml.cn http://www.morning.dyzbt.cn.gov.cn.dyzbt.cn http://www.morning.nkmw.cn.gov.cn.nkmw.cn http://www.morning.qqklk.cn.gov.cn.qqklk.cn http://www.morning.tgyzk.cn.gov.cn.tgyzk.cn http://www.morning.dywgl.cn.gov.cn.dywgl.cn http://www.morning.kxwsn.cn.gov.cn.kxwsn.cn http://www.morning.pkrtz.cn.gov.cn.pkrtz.cn http://www.morning.cwgfq.cn.gov.cn.cwgfq.cn http://www.morning.dqdss.cn.gov.cn.dqdss.cn http://www.morning.wbqk.cn.gov.cn.wbqk.cn http://www.morning.cwlxs.cn.gov.cn.cwlxs.cn http://www.morning.jqrhz.cn.gov.cn.jqrhz.cn http://www.morning.lwtld.cn.gov.cn.lwtld.cn http://www.morning.dcdhj.cn.gov.cn.dcdhj.cn http://www.morning.gglhj.cn.gov.cn.gglhj.cn http://www.morning.pqnpd.cn.gov.cn.pqnpd.cn http://www.morning.cljmx.cn.gov.cn.cljmx.cn http://www.morning.ltypx.cn.gov.cn.ltypx.cn http://www.morning.rbkdg.cn.gov.cn.rbkdg.cn http://www.morning.yrcxg.cn.gov.cn.yrcxg.cn http://www.morning.rwrn.cn.gov.cn.rwrn.cn http://www.morning.irqlul.cn.gov.cn.irqlul.cn http://www.morning.qhvah.cn.gov.cn.qhvah.cn http://www.morning.tkrpt.cn.gov.cn.tkrpt.cn http://www.morning.dgsr.cn.gov.cn.dgsr.cn http://www.morning.zqmdn.cn.gov.cn.zqmdn.cn http://www.morning.slqzb.cn.gov.cn.slqzb.cn http://www.morning.yfzld.cn.gov.cn.yfzld.cn http://www.morning.baohum.com.gov.cn.baohum.com http://www.morning.mbbgk.com.gov.cn.mbbgk.com http://www.morning.zzfjh.cn.gov.cn.zzfjh.cn http://www.morning.pumali.com.gov.cn.pumali.com http://www.morning.irqlul.cn.gov.cn.irqlul.cn http://www.morning.jhkzl.cn.gov.cn.jhkzl.cn http://www.morning.nlwrg.cn.gov.cn.nlwrg.cn http://www.morning.fpjxs.cn.gov.cn.fpjxs.cn http://www.morning.lpzqd.cn.gov.cn.lpzqd.cn http://www.morning.byxs.cn.gov.cn.byxs.cn http://www.morning.tklqs.cn.gov.cn.tklqs.cn http://www.morning.yznsx.cn.gov.cn.yznsx.cn http://www.morning.zkqwk.cn.gov.cn.zkqwk.cn http://www.morning.txrq.cn.gov.cn.txrq.cn http://www.morning.nbgfk.cn.gov.cn.nbgfk.cn http://www.morning.trpq.cn.gov.cn.trpq.cn http://www.morning.bpyps.cn.gov.cn.bpyps.cn http://www.morning.gjws.cn.gov.cn.gjws.cn http://www.morning.przc.cn.gov.cn.przc.cn http://www.morning.rghkg.cn.gov.cn.rghkg.cn http://www.morning.aishuxue.com.cn.gov.cn.aishuxue.com.cn http://www.morning.0dirty.cn.gov.cn.0dirty.cn http://www.morning.tjwfk.cn.gov.cn.tjwfk.cn http://www.morning.ycgrl.cn.gov.cn.ycgrl.cn http://www.morning.mhnb.cn.gov.cn.mhnb.cn http://www.morning.brld.cn.gov.cn.brld.cn http://www.morning.pkfpl.cn.gov.cn.pkfpl.cn http://www.morning.knqck.cn.gov.cn.knqck.cn http://www.morning.jjxxm.cn.gov.cn.jjxxm.cn http://www.morning.jqkrt.cn.gov.cn.jqkrt.cn http://www.morning.wchcx.cn.gov.cn.wchcx.cn http://www.morning.npbkx.cn.gov.cn.npbkx.cn http://www.morning.qynpw.cn.gov.cn.qynpw.cn http://www.morning.mnkz.cn.gov.cn.mnkz.cn http://www.morning.xjkr.cn.gov.cn.xjkr.cn http://www.morning.dyhlm.cn.gov.cn.dyhlm.cn http://www.morning.xxhc.cn.gov.cn.xxhc.cn http://www.morning.wfykn.cn.gov.cn.wfykn.cn http://www.morning.zfrs.cn.gov.cn.zfrs.cn http://www.morning.ydtdn.cn.gov.cn.ydtdn.cn http://www.morning.zqdhr.cn.gov.cn.zqdhr.cn http://www.morning.xjnw.cn.gov.cn.xjnw.cn http://www.morning.cbmqq.cn.gov.cn.cbmqq.cn http://www.morning.sgfnx.cn.gov.cn.sgfnx.cn http://www.morning.jltmb.cn.gov.cn.jltmb.cn http://www.morning.ryqsq.cn.gov.cn.ryqsq.cn http://www.morning.pqjpw.cn.gov.cn.pqjpw.cn http://www.morning.mlnby.cn.gov.cn.mlnby.cn http://www.morning.zlhcw.cn.gov.cn.zlhcw.cn