文章目录

  • 一、使用 MetaClass 注入静态方法
  • 二、完整代码示例

一、使用 MetaClass 注入静态方法


使用 MetaClass 注入静态方法 , 可以使用如下代码实现 :

类名.metaClass.'static'.被注入的静态方法名 = { 闭包 }

定义 Student 类 , 其中定义 name 成员 ;

class Student {def name;
}

使用上述语法 , 向 Student 类注入 hello 静态方法 ;

// 向 Student 类注入 hello 静态方法
Student.metaClass.'static'.hello = {println "Hello Student ${delegate.name}"
}

注意这里在 被注入的 hello 静态方法中 , 使用了 delegate ,

  • 如果使用 Student 类调用 hello 方法 , 则 delegate 就是 Student 类 ;
// 通过 Student 类调用静态方法
Student.hello()
  • 如果使用 Student 对象调用 hello 方法 , 则 delegate 就是 Student 对象 ;
// 通过 Student 对象调用静态方法
def student = new Student(name: "Tom")
student.hello()

二、完整代码示例


完整代码示例 :

class Student {def name;
}// 向 Student 类注入 hello 方法
Student.metaClass.'static'.hello = {println "Hello Student ${delegate.name}"
}// 通过 Student 类调用静态方法
Student.hello()// 通过 Student 对象调用静态方法
def student = new Student(name: "Tom")
student.hello()

执行结果 :

Hello Student Student
Hello Student Tom

【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 MetaClass 注入静态方法 )相关推荐

  1. 【Groovy】MOP 元对象协议与元编程 ( 方法委托 | 批量方法委托 )

    文章目录 一.批量方法委托 二.完整代码示例 一.批量方法委托 在上一篇博客 [Groovy]MOP 元对象协议与元编程 ( 方法委托 | 正常方法调用 | 方法委托实现 | 代码示例 ) 中 , 将 ...

  2. 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 @Mixin 注解进行方法注入 | Mixin 混合多个类优先级分析 )

    文章目录 一.使用 Mixin 混合进行方法注入 二.Mixin 混合多个类优先级分析 一.使用 Mixin 混合进行方法注入 在上一篇博客 [Groovy]MOP 元对象协议与元编程 ( 方法注入 ...

  3. 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 ExpandoMetaClass 进行方法注入 )

    文章目录 一.使用 ExpandoMetaClass 进行方法注入 三.完整代码示例 一.使用 ExpandoMetaClass 进行方法注入 在 [Groovy]MOP 元对象协议与元编程 ( 方法 ...

  4. 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 Category 分类进行方法注入的优缺点 )

    文章目录 一.使用 Category 分类进行方法注入的优点 二.使用 Category 分类进行方法注入的缺点 一.使用 Category 分类进行方法注入的优点 之前的博客 [Groovy]MOP ...

  5. 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 Category 分类注入方法 )

    文章目录 一.方法注入 二.使用 Category 分类注入方法 三.完整代码示例 一.方法注入 在之前的博客中 , 主要是使用 Groovy 元编程 拦截方法 , 改变方法的实现 ; 使用元编程还可 ...

  6. 【Groovy】MOP 元对象协议与元编程 ( 方法合成 | 动态注入方法 )

    文章目录 一.动态注入方法 二.完整代码示例 一.动态注入方法 调用 Student 类不存在的方法 , 如果该类重写了 def methodMissing(String name, def args ...

  7. 【Groovy】MOP 元对象协议与元编程 ( Groovy 类内部和外部分别获取 metaClass | 分析获取 metaClass 操作的字节码 | HandleMetaClass 注入方法 )

    文章目录 一.Groovy 类内部和外部分别获取 metaClass 二.分析 Groovy 类内部和外部获取 metaClass 操作的字节码 三.使用 HandleMetaClass 注入方法 一 ...

  8. 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 同时注入普通方法、静态方法、构造方法 )

    文章目录 一.同时注入普通方法.静态方法.构造方法 二.完整代码示例 一.同时注入普通方法.静态方法.构造方法 如果要同时为 Groovy 类注入大量方法 , 使用 Category 分类 或 Met ...

  9. 【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 重写 MetaClass#invokeMethod 方法实现函数拦截 | 实现函数调用转发 )

    文章目录 一.重写 MetaClass#invokeMethod 方法实现函数拦截 二.在 MetaClass#invokeMethod 方法中调用对象的其它方法 三.完整代码示例 一.重写 Meta ...

  10. 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 分析使用 MetaClass 进行方法注入前后 mateClass 类型变化 )

    文章目录 一.分析使用 MetaClass 进行方法注入前后 mateClass 类型变化 二.完整代码示例 一.分析使用 MetaClass 进行方法注入前后 mateClass 类型变化 打印下面 ...

最新文章

  1. css 子元素设置float,父元素高度塌陷
  2. Add A Qdisk After configure RHCS
  3. GPIO及中断API函数
  4. php读取mysql数据无法修改时间_php设置mysql查询读取数据的超时时间
  5. POST请求转换为其他请求失效 input type=“hidden“ name=“_method“ value=“put“无效
  6. php注册树模式,PHP设计模式之详记注册树模式
  7. python面试题(6)--- read、readline和readlines的区别
  8. Exsi6.5修改主机密码
  9. Node.js---02、node.js 模块加载机制
  10. 杭电1203--I NEED A OFFER!(01背包)
  11. nodejs在自然语言处理中的一些小应用
  12. 什么是SOHO一族?
  13. 移动磁盘故障,如何在Mac修复?
  14. promise入门的准备工作-(尚硅谷教程笔记)
  15. c语言大作业通讯录报告,数据结构大作业报告-C语言通讯录系统-链表.pdf
  16. python因子分析 ic值 函数_spss问卷调查因子分析定义变量及内容输入
  17. 使用小马激活工具激活Windows后,浏览器的首页被篡改,如何改回去?
  18. bat批处理实现win和linux间上传下载
  19. 老男孩教育教育46期 LIHAO
  20. 台电tbook10s删除安卓系统_Andriod系统体验 简洁流畅_台电 TBook 10_平板电脑评测-中关村在线...

热门文章

  1. c语言过程中的理论杂篇。
  2. linux tunnel 与cisco 三层交换机的tunnel互联
  3. oracle 字符串转为正数用 to_number()……
  4. [导入]ASP.NET 2.0 读取配置文件[INI](示例代码下载)
  5. Java反射中method.isBridge() 桥接方法
  6. SpingMVC类型转换
  7. 移动端geolocation插件+百度地图js获取地址
  8. mapreduce原理
  9. Javaweb 第1天 HTML和CSS课程
  10. a链接的四个伪类顺序