java反射及其相关应用

本篇从java的反射概念引出,介绍反射的java概念及其相关api,并提供相关案例代码来具体应用。
按照惯例,源代码已上传:(开发工具idea,jdk版本1.8)
https://git.dev.tencent.com/louchengchun/reflectDemo.git
下面开始具体的演示
一,java中反射机制基本概念及重要方法。
  1,java的反射机制其实就是,java在运行时,对于任意一个类都能够知道这个类所有的属性和方法;对于任意一个对象,都能够调用它的任意一个方法;要理解反射,首先要理解class对象的概念,class对象是在类加载的时候由Java虚拟机通过调用类加载器中的 defineClass 方法自动构造的,每个类都有一个唯一的class对象,这里需明确的一点就是class对象的唯一性
  2,根据第一条,反射既然可以获得所有的属性和方法,那必然给我们提供了获取的方法,查看class类的api可知,具体的演示在上面的源代码中,这里不再赘述。(提供一个在线的jdk文档http://tool.oschina.net/apidocs/apidoc?api=jdk-zh)
  3,个人感觉需要注意的点。1,我们可以通过三种方式获取class对象,但是最常用的就是Class.forName(className)方法,因为className是一个字符串,我们可以通过注解或者配置文件传递值(源代码已举例);2,通过class对象获取类的实例的时候,如果构造方法不带参数,我们可以直接使用该类class对象提供的newInstance()方法直接生成,但是如果构造方法有参数,就需要通过class对象先获取该类的构造方法对象Constructor,再通过Constructor的newInstance()方法获得(源代码已举例)
二,由反射机制结合servlet的概念,抽取baseServlet。
  * servlet可以说是javaweb的核心基础了,baseServlet的抽取也是由基础到深入的必经之路。说一下需要注意的点。
   1,我们的需求是把原来的LoginServlet、RegistServlet、AddUserServlet等对于用户信息的操作,抽取到一个UserSerlvet中,这些具体的操作,通过方法来区分。原来我们的servlet是继承HttpServlet,并重写其中的doget或者dopost方法,现在,我们抽取一个baseServlet方法,在其中重写service方法。原先的doget和dopost方法注释掉。(这里需要理解servlet的运行机制,当一个请求过来的时候,会默认寻找该请求对应servlet中的service方法,如果本类中找不到,那么就去父类中找。)
*   2,对于当前对象的理解。(源代码注释上已经解释了这个问题,因表达能力有限,直接通过代码说明))

三,代理模式的介绍及通过反射实现jdk动态代理。
   *代理模式的应用场景,推荐下面的博客:https://www.cnblogs.com/V1haoge/p/6525527.html
  代理模式的核心目标接口、目标类(被代理类)、代理类。最常见的两种代理模式为静态代理和动态代理(cglib代理在后面更新)
   动态代理需注意的点:1,代理类需实现InvocationHandler接口,并重写其中的invoke方法,执行method.invoke()方法在这里插入图片描述
2,Proxy类的静态方法newProxyInstance()方法,顾名思义,创建一个新的代理类实例,(这里的返回值,是java虚拟机动态创建的代理类的实例,不是我们手写的类的实例)在这里插入图片描述

第一个参数,类加载器,可以使用目标类的类加载器,通过目标类的类对象的getClassLoader()方法来获取;第二个参数,目标类实现的所有接口,可以通过目标类的类对象的getInterfaces()方法获取(这也是jdk动态代理的目标类必须实现一个接口的原因)第三个参数,InvocationHandler,直接传递当前代理类的实例就可以。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值