【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 分析使用 MetaClass 进行方法注入前后 mateClass 类型变化 )
文章目录
- 一、分析使用 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 类型变化 )相关推荐
- 【Groovy】MOP 元对象协议与元编程 ( 方法委托 | 批量方法委托 )
文章目录 一.批量方法委托 二.完整代码示例 一.批量方法委托 在上一篇博客 [Groovy]MOP 元对象协议与元编程 ( 方法委托 | 正常方法调用 | 方法委托实现 | 代码示例 ) 中 , 将 ...
- 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 @Mixin 注解进行方法注入 | Mixin 混合多个类优先级分析 )
文章目录 一.使用 Mixin 混合进行方法注入 二.Mixin 混合多个类优先级分析 一.使用 Mixin 混合进行方法注入 在上一篇博客 [Groovy]MOP 元对象协议与元编程 ( 方法注入 ...
- 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 ExpandoMetaClass 进行方法注入 )
文章目录 一.使用 ExpandoMetaClass 进行方法注入 三.完整代码示例 一.使用 ExpandoMetaClass 进行方法注入 在 [Groovy]MOP 元对象协议与元编程 ( 方法 ...
- 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 Category 分类进行方法注入的优缺点 )
文章目录 一.使用 Category 分类进行方法注入的优点 二.使用 Category 分类进行方法注入的缺点 一.使用 Category 分类进行方法注入的优点 之前的博客 [Groovy]MOP ...
- 【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 重写 MetaClass#invokeMethod 方法拦截 JDK 中已经定义的函数 )
文章目录 一.重写 MetaClass#invokeMethod 方法拦截 JDK 中已经定义的函数 1.被拦截的 String#contains 方法原型 2.JDK 正常用法 3.拦截 Strin ...
- 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 Category 分类注入方法 )
文章目录 一.方法注入 二.使用 Category 分类注入方法 三.完整代码示例 一.方法注入 在之前的博客中 , 主要是使用 Groovy 元编程 拦截方法 , 改变方法的实现 ; 使用元编程还可 ...
- 【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 使用 MetaClass 进行方法拦截 | 对象上拦截方法 | 类上拦截方法 )
文章目录 一.使用 MetaClass 进行方法拦截 1.使用 MetaClass 在单个对象上进行方法拦截 2.使用 MetaClass 在类上进行方法拦截 二.完整代码示例 1.对象方法拦截 2. ...
- 【Groovy】MOP 元对象协议与元编程 ( 通过 MetaMethod#invoke 执行 Groovy 方法 )
文章目录 一.通过 MetaMethod#invoke 执行 Groovy 方法 二.完整代码示例 一.通过 MetaMethod#invoke 执行 Groovy 方法 已经定义 Groovy 类 ...
- 【Groovy】MOP 元对象协议与元编程 ( 方法合成 | 动态注入方法 )
文章目录 一.动态注入方法 二.完整代码示例 一.动态注入方法 调用 Student 类不存在的方法 , 如果该类重写了 def methodMissing(String name, def args ...
最新文章
- spring security remember me实现自动登录
- 用构造函数来完成结构体的初始化
- 国自然申请初审中的注意事项
- 安装openstack_午餐前如何安装OpenStack Cloud
- linux关闭gvim命令,Linux 下 8 种退出 vim 编辑器的方法
- 鸿蒙os2.0怎么报名,我想问一下各位,怎么报名鸿蒙os2.0
- opencv函数制作的秒针模型
- 基于模板的通用代码生成器LKGenerator(三)-模板示例
- MAC SSH密钥登陆
- Java 构造器 通过私有构造器强化不可实例化的能力
- go 语言学习 1. go的特性
- i3cpu驱动xp_Intel英特尔Core i3/Core i5/Core i7系列CPU核芯显卡驱动
- python获取像素值_从PIL获取像素值列表
- 思维导图软件哪个好?盘点10款好用的思维导图软件
- Navivat 中快速快捷查找表和数据
- Request method XXX not supported
- 【转】互操作性的区块链系统设计理念
- iOS静态库中打包图片资源
- Python学习打卡【Task4】列表,字典和元组
- 云邦互联 免费空间 我来试一试