反射相关

反射的应用

  1. ide里面的自动提示,我们在键入代码时,其实ide对应的程序就处于运行期,通过收集我们的键入,来推测键入的代码是否是一个变量,如果是一个变量的话,在键入"."以后,就会通过反射获取相应的Class对象,来进行相关的提示。
  2. IoC中对象的生成,就是通过反射。
    所有类的相关信息,都只有在spring启动时,才能确定。每个项目注入的bean不同,但最终的伪代码是一致的,伪代码中为了注入真实的对象,不可能针对不同的项目编写相关的new ClassName类似的高度耦合的代码,只能用反射来获取相关的实例对象。
    相关的伪代码

     
     

string class1 = "xxx.xxx.courseService";
string class2 = "xxx.xxx.courseDao";
Class clazz1 = Class.forName(class1);
Class clazz2 = Class.forName(class2);
Method method = clazz1.getMethod(class1 setcourseDao 相关方法);
method.invoke(clazz1, clazz2);

反射为什么慢

  1. 反射底层会调用cpp代码,JVM在执行java和cpp代码时的上下文信息、相关组件肯定是不一样的,切换上下文信息和相关组件意味着时间消耗->性能损耗->慢。
  2. Method.invoke()源码中,形参是Object类型的可变长参数,Object对象在具体使用时,会进行强制类型转换,意味着时间消耗->性能损耗->慢。

你可能感兴趣的:(反射相关)