• java反射


    序言:

          在学习java基础时,由于学的不扎实,讲的实用性不强,就觉得没用,很多重要的知识就那样一笔带过了,像这个马上要讲的反射机制一样,当时学的时候就忽略了,到后来学习的知识中,很多东西动不动就用反射,所以回过头来把这个给重新补一下,自己欠下的债,迟早是要还的。

    反射的概念:

    在运行状态中,对于任意一个类,都能够获取到这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性(包括私有的方法和属性),这种动态获取的信息以及动态调用对象的方法的功能就称为java语言的反射机制。通俗点讲,通过反射,该类对我们来说是完全透明的,想要获取任何东西都可以。

    获取字节码文件对象的三种方式:

    1、Class clazz1 = Class.forName("全限定类名");  //通过Class类中的静态方法forName,直接获取到一个类的字节码文件对象,此时该类还是源文件阶段,并没有变为字节码文件。

    2、Class clazz2  = Person.class;    //当类被加载成.class文件时,此时Person类变成了.class,在获取该字节码文件对象,也就是获取自己, 该类处于字节码阶段。

    3、Class clazz3 = p.getClass();    //通过类的实例获取该类的字节码文件对象,该类处于创建对象阶段

    通过反射机制可以获取到哪些信息:

    1.创建实例

     2。获取指定构造器方法。

    3.获取指定成员变量

    3.1获取全部成员变量

    4.获得方法并使用  Method

    *反射的代理实现:

    反射的重点是代理的实现,因为在以后的开发中经常用到,例:spring框架的aop声明式事务控制,就要用到动态代理的实现。

    代理分动态代理和静态代理,这里主要介绍动态代理:动态代理是一种设计模式,其非常简单,很容易理解,你自己可以做这件事,但是觉得自己做非常麻烦或者不方便,所以就叫一个另一个人(代理)来帮你做这个事情,而你就不用管了,这就是动态代理。举个例子,买火车票叫人代买。

    我们此处主要介绍JDK提供的代理,也是比较好用的一种代理,

    1、new出代理对象,通过实现InvacationHandler接口,然后new出代理对象来。

    2、通过Proxy类中的静态方法newProxyInstance,来将代理对象假装成那个被代理的对象,也就是如果叫人帮我们代买火车票一样,那个代理就假装成我们自己本人

    3、执行方法,代理成功

    另外还有cglib,Proxy类中的方法创建动态代理类对象,这里就不多介绍了,以后用到再补充。

    原文地址:https://www.cnblogs.com/jingyukeng/p/10235580.html
  • 相关阅读:
    泛型自限定
    java 泛型类转型
    迷茫
    spring boot 连接mysql 错误The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one
    mysql8.0.14 安装
    泛型通配符
    java 泛型数组
    java FTP上传文件
    spring location设置本地路径
    套接口定义
  • 原文地址:https://www.cnblogs.com/jpfss/p/11555003.html
Copyright © 2020-2023  润新知