文章目录

  • 一、分析使用 MetaClass 进行方法注入前后 mateClass 类型变化
  • 二、完整代码示例

一、分析使用 MetaClass 进行方法注入前后 mateClass 类型变化


打印下面 Student 类 的 metaClass ,

class Student {def name;
}println Student.metaClass

打印结果如下 :

org.codehaus.groovy.runtime.HandleMetaClass@3745e5c6[groovy.lang.MetaClassImpl@3745e5c6[class Student]]

使用 metaClass 向 Student类中 , 注入了多个方法 ,

// 注入多个类型的方法
Student.metaClass {// 注入普通方法hello = {println "Hello ${delegate.name}"}// 注入普通方法say = {println "My name is ${delegate.name}"}// 注入静态方法'static' {fun = {println "Class Type : ${delegate}"}}// 注入构造方法constructor = {String str ->new Student(name: str)}
}

注入之后 , 再次使用 println Student.metaClass 打印 Student.metaClass 内容 , 打印结果变成了

groovy.lang.ExpandoMetaClass@41e36e46[class Student]

方法注入前 , 类的 metaClass 类型为 org.codehaus.groovy.runtime.HandleMetaClass , 方法注入后 , 类的 metaClass 的类型变为了 groovy.lang.ExpandoMetaClass ;

使用 MetaClass 进行方法注入 , 是通过将 metaClass 替换为 groovy.lang.ExpandoMetaClass 对象实现的 ;

二、完整代码示例


完整代码示例 :

class Student {def name;
}println Student.metaClass// 注入多个类型的方法
Student.metaClass {// 注入普通方法hello = {println "Hello ${delegate.name}"}// 注入普通方法say = {println "My name is ${delegate.name}"}// 注入静态方法'static' {fun = {println "Class Type : ${delegate}"}}// 注入构造方法constructor = {String str ->new Student(name: str)}
}println Student.metaClass// 调用注入的静态方法
Student.fun()// 使用注入的构造方法初始化 Student 类
def student = new Student("Tom")// 调用注入的普通方法
student.hello()
student.say()

执行结果 :

org.codehaus.groovy.runtime.HandleMetaClass@3745e5c6[groovy.lang.MetaClassImpl@3745e5c6[class Student]]
groovy.lang.ExpandoMetaClass@7c0c77c7[class Student]
Class Type : class Student
Hello Tom
My name is Tom

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

  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 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 重写 MetaClass#invokeMethod 方法拦截 JDK 中已经定义的函数 )

    文章目录 一.重写 MetaClass#invokeMethod 方法拦截 JDK 中已经定义的函数 1.被拦截的 String#contains 方法原型 2.JDK 正常用法 3.拦截 Strin ...

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

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

  7. 【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 使用 MetaClass 进行方法拦截 | 对象上拦截方法 | 类上拦截方法 )

    文章目录 一.使用 MetaClass 进行方法拦截 1.使用 MetaClass 在单个对象上进行方法拦截 2.使用 MetaClass 在类上进行方法拦截 二.完整代码示例 1.对象方法拦截 2. ...

  8. 【Groovy】MOP 元对象协议与元编程 ( 通过 MetaMethod#invoke 执行 Groovy 方法 )

    文章目录 一.通过 MetaMethod#invoke 执行 Groovy 方法 二.完整代码示例 一.通过 MetaMethod#invoke 执行 Groovy 方法 已经定义 Groovy 类 ...

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

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

最新文章

  1. spring security remember me实现自动登录
  2. 用构造函数来完成结构体的初始化
  3. 国自然申请初审中的注意事项
  4. 安装openstack_午餐前如何安装OpenStack Cloud
  5. linux关闭gvim命令,Linux 下 8 种退出 vim 编辑器的方法
  6. 鸿蒙os2.0怎么报名,我想问一下各位,怎么报名鸿蒙os2.0
  7. opencv函数制作的秒针模型
  8. 基于模板的通用代码生成器LKGenerator(三)-模板示例
  9. MAC SSH密钥登陆
  10. Java 构造器 通过私有构造器强化不可实例化的能力
  11. go 语言学习 1. go的特性
  12. i3cpu驱动xp_Intel英特尔Core i3/Core i5/Core i7系列CPU核芯显卡驱动
  13. python获取像素值_从PIL获取像素值列表
  14. 思维导图软件哪个好?盘点10款好用的思维导图软件
  15. Navivat 中快速快捷查找表和数据
  16. Request method XXX not supported
  17. 【转】互操作性的区块链系统设计理念
  18. iOS静态库中打包图片资源
  19. Python学习打卡【Task4】列表,字典和元组
  20. 云邦互联 免费空间 我来试一试

热门文章

  1. 《战略管理》第一章什么是战略管理读书笔记
  2. 数据科学概论Learning Road Map
  3. 绘声绘影X9 -音频基本设置(6)
  4. 天翼网盘目录php,天翼云盘文件同步与目录设置方法
  5. 某盘提速下载工具Proxyee-down快速下载大文件
  6. 12位密码最靠谱 破解需用17134年
  7. 百度SEO站群在线随机看抖音快手小姐姐网站源码
  8. 实施工作总结(真的写的很好)
  9. AD20铺铜操作及设置
  10. 亚马逊测评,提示listing被限流了,问题出在哪里?