首先说下作用,method.invoke(Object obj,Object args[])的作用就是调用method类代表的方法,其中obj是对象名,args是传入method方法的参数

举个例子:如果接口中没有close方法,但是实现类中提供了close,那么就可以用反射来处理,调用实现类的close方法

invoke()方法接收的参数必须为对象,如果参数为基本类型数据,必须转换为相应的包装类型的对象。

invoke()方法的返回值总是对象,如果实际被调用的方法的返回类型是基本类型数据,那么invoke()方法会把它转换为相应的包装类型的对象,再将其返回.

有四种获得method对象的方法,返回结果是method对象,或者说是 方法的全限定名
  一共有4种方法,全部都在Class类中:
    - getMethods(): 获得类的public类型的方法
    - getMethod(String name, Class[] params): 获得类的特定方法,name参数指定方法的名字,params参数指定方法的参数类型
    - getDeclaredMethods(): 获取类中所有的方法(public、protected、default、private)
    - getDeclaredMethod(String name, Class[] params): 获得类的特定方法,name参数指定方法的名字,params参数指定方法的参数类型

另外关于代理类,以下Proxy.newProxyInstance的相关内容 是整理自B站的一个视频,

链接如下:https://www.bilibili.com/video/av15369076?p=19

Proxy.newProxyInstance

*         参数1:loader ,类加载器,动态代理类 运行时创建,任何类都需要类加载器将其加载到内存。

*                一般情况:方式1:当前类.class.getClassLoader();

*                                方式2:目标类实例.getClass().get...

*         参数2:Class[] interfaces 代理类需要实现的所有接口

*                方式1:目标类实例.getClass().getInterfaces()  ;但是需要注意:这种方法只能获得自己接口,不能获得父元素接口

*                方式2:new Class[]{UserService.class}

*                例如:jdbc 驱动  --> DriverManager  不能获得接口 Connection

*         参数3:InvocationHandler  处理类,接口,必须进行实现类,一般采用匿名内部

*         提供invoke 方法,代理类的每一个方法执行时,都将调用一次invoke

*         参数31:Object proxy :代理对象

*         参数32:Method method : 代理对象当前执行的方法的描述对象(反射)

*                  执行方法名:method.getName()

*           参数33:Object[] args :方法实际参数

Invoke方法内部:

*                  执行方法:method.invoke(对象,实际参数)

public class MyBeanFactory {public static UserService createService(){//1 目标类final UserService userService = new UserServiceImpl();//2切面类final MyAspect myAspect = new MyAspect();/* 3 代理类:将目标类(切入点)和 切面类(通知) 结合 --> 切面*     Proxy.newProxyInstance*         参数1:loader ,类加载器,动态代理类 运行时创建,任何类都需要类加载器将其加载到内存。*            一般情况:当前类.class.getClassLoader();*                    目标类实例.getClass().get...*        参数2:Class[] interfaces 代理类需要实现的所有接口*             方式1:目标类实例.getClass().getInterfaces()  ;注意:只能获得自己接口,不能获得父元素接口*          方式2:new Class[]{UserService.class}   *           例如:jdbc 驱动  --> DriverManager  获得接口 Connection*       参数3:InvocationHandler  处理类,接口,必须进行实现类,一般采用匿名内部*             提供 invoke 方法,代理类的每一个方法执行时,都将调用一次invoke*               参数31:Object proxy :代理对象*              参数32:Method method : 代理对象当前执行的方法的描述对象(反射)*                     执行方法名:method.getName()*                  执行方法:method.invoke(对象,实际参数)*              参数33:Object[] args :方法实际参数* */UserService proxService = (UserService)Proxy.newProxyInstance(MyBeanFactory.class.getClassLoader(), userService.getClass().getInterfaces(), new InvocationHandler() { @Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {//前执行myAspect.before();    //执行目标类的方法Object obj = method.invoke(userService, args);               //后执行myAspect.after();return obj;}});return proxService;}}

method.invoke()和invoke()简单理解相关推荐

  1. jdk和cglib简单理解

    转载自 jdk和cglib简单理解 之前使用cglib的时候不需要将classLoader作为参数传入,但动态代理却要,带着这个疑惑进入这个方法: Proxy.newProxyInstance(cla ...

  2. JDK 动态代理的简单理解

    http://www.cnblogs.com/luotaoyeah/p/3778183.html JDK 动态代理的简单理解 动态代理 代理模式是 Java 中的常用设计模式,代理类通过调用被代理类的 ...

  3. php _call call_user_func_array,PHP call_user_func和call_user_func_array函数的简单理解与应用分析...

    本文实例讲述了PHP call_user_func和call_user_func_array函数的简单理解与应用.分享给大家供大家参考,具体如下: call_user_func():调用一个回调函数处 ...

  4. Deep Reinforcement Learning: Pong from Pixels翻译和简单理解

    原文链接: http://karpathy.github.io/2016/05/31/rl/ 文章目录 原文链接: 前言 Policy-Gradient结构流程图 Deep Reinforcement ...

  5. 简单理解常量、常量池、运行时常量池和字符串常量池

    1.常量 常量在java中就值的是一般的字面量,比如字符串,整数,浮点数等等数据.简单理解java中什么叫常量 2.常量池,也叫静态常量池或者class文件常量池,说常量池一定要指明是编译器产生的.它 ...

  6. Android:安卓学习笔记之OkHttp原理的简单理解和使用

    Android OkHttp使用原理的简单理解和使用 OkHttp 0.前言 1.请求与响应流程 1.1 请求的封装 1.2 请求的发送 1.3 请求的调度 1.4 请求的处理 2.拦截器 2.1 R ...

  7. Spring Security并没有那么难嗷 简单理解OAuth2.0

    文章目录 1. 基本概念 1.1 什么是认证 1.2 什么是会话 1.3 什么是授权 1.4 授权的数据模型 1.5 RBAC 1.5.1 基于角色的访问控制 1.5.2 基于资源的访问控制 2. 基 ...

  8. android 点击事件消费,Android View事件分发和消费源码简单理解

    Android View事件分发和消费源码简单理解 前言: 开发过程中觉得View事件这块是特别烧脑的,看了好久,才自认为看明白.中间上网查了下singwhatiwanna粉丝的读书笔记,有种茅塞顿开 ...

  9. 【转载】Deep learning:十九(RBM简单理解)

    Deep learning:十九(RBM简单理解) 这篇博客主要用来简单介绍下RBM网络,因为deep learning中的一个重要网络结构DBN就可以由RBM网络叠加而成,所以对RBM的理解有利于我 ...

  10. 学习:双机热备、集群、负载均衡、SQL故障转移群集简单理解(转)

    双机热备.集群.负载均衡.SQL故障转移群集简单理解平常,大家常提到几个技术名词:双机热备.集群.负载均衡.SQL故障转移群集.这里,就我的理解,和大家简单探讨下,有不足或错误之处还请各位指出! 这些 ...

最新文章

  1. 英国脱欧但网络安全领域重视未减
  2. 第四届“强网杯”全国网络安全挑战赛_部分WP
  3. 《C程序设计语言》(第二版)要点总结
  4. 用API函数播放wav文件声音不连续的解决方法
  5. 新海诚没有参与制作的作品_继《你的名字》之后,新海诚又出新作啦!!
  6. vue-awesome-swiper使用
  7. html调用chr,FpHtmlEnCode 函数之标题过滤特殊符号的代码
  8. Windows应急响应操作手册
  9. centos mysql 实战 第一节课 安全加固 mysql安装
  10. Ubuntu13.04配置优化(一)转贴
  11. 考研英语 - word-list-23
  12. 手把手教你调整电脑磁盘的分区大小
  13. Debian10 双显卡切换
  14. 如何快速部署静态页面?
  15. 十年工作经验的中层员工如何在大厂生存?
  16. WebStorm下载及破解
  17. 阿里云数据库RDS MySQL Serverless测评
  18. 一个中科大差生的 8 年程序员工作总结
  19. iOS包体积优化-图片优化
  20. php表格怎么自动排序,Excel表格怎么自动排名

热门文章

  1. AI创业时代!这9个方向有钱途;AIGC再添霸榜应用Lensa;美团SemEval2022冠军方法分享;医学图像处理工具箱… | ShowMeAI资讯日报
  2. 基于Python通过Chrome的Cookie登录百度账户
  3. 基站频谱扫描-高性能扫频仪 TFN FGT720A
  4. 关于vSphere vMotion的讨论 -3
  5. I2C、Arduino、ADXL345、
  6. request.getLocale()
  7. 深入理解Linux内核第3版--笔记-1.pdf
  8. 模4补码(也称为变形补码)详解
  9. 网红蛋糕店整体室内装修施工图+效果图
  10. 滤波算法一(C程序)