【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 MetaClass 进行方法注入普通方法 )
2023-06-13 09:18:00 时间
文章目录
一、使用 MetaClass 进行方法注入
定义 Student 类 ,
class Student {
def name;
}
为该 Student 类注入一个 hello 方法 , 先获取 Student 类的 metaClass 成员 , 然后为其注入 hello 方法 , 使用 << 符号 , 后面带上一个闭包 , 即可注入方法 , 在闭包中 , delegate 就是 Student 对象 ;
// 向 Student 类注入 hello 方法
Student.metaClass.hello << {
println delegate
println "Hello ${delegate.name}"
}
创建 Student 实例对象 , 调用为 Student 类注入的 hello 方法 ,
def student = new Student(name: "Tom")
student.hello()
即可打印出
Student@5dd6264
Hello Tom
内容 , 其中 Student@5dd6264
是 MetaClass 中的 delegate 代理对象 ;
此处注意 , 注入方法使用 << 运算符 , 替换 / 拦截方法 使用 = 运算符 ;
方法注入后 , 在 类 的 metaClass 中注入的方法 , 在任何 Student 对象中 , 都可以调用被注入的 hello 方法 ;
但是在 对象 的 metaClass 中注入的方法 , 只有该 Student 对象才能调用被注入的 hello 方法 , 其它对象不能调用该注入的方法 ;
二、完整代码示例
完整代码示例 :
class Student {
def name;
}
// 向 Student 类注入 hello 方法
Student.metaClass.hello << {
println delegate
println "Hello ${delegate.name}"
}
/*
注入方法使用 <<
替换 / 拦截方法 使用 =
*/
def student = new Student(name: "Tom")
student.hello()
执行结果 :
Student@5dd6264
Hello Tom
相关文章
- JAVA以UTF-8导出CSV文件,用excel打开产生乱码的解决方法
- 【IOC 控制反转】Android 事件依赖注入 ( 事件依赖注入具体的操作细节 | 获取要注入事件的 View 对象 | 通过反射获取 View 组件的事件设置方法 )
- 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 Category 分类注入方法 )
- 【错误记录】Groovy 注入方法报错 ( Cannot add new method [hello] for arguments [[]]. It already exists )
- 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 MetaClass 注入静态方法 )
- 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 MetaClass 进行方法注入构造方法 )
- 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 ExpandoMetaClass 进行方法注入 )
- 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 @Mixin 注解进行方法注入 | Mixin 混合多个类优先级分析 )
- 【Groovy】MOP 元对象协议与元编程 ( 方法合成 | 动态注入方法 )
- 防御SQL注入的方法总结
- 关于Oracle listener日志解析利器的使用方法
- Mysql注入点在limit关键字后面的利用方法
- T-SQL篇如何防止SQL注入的解决方法
- MySQL注入攻击的高级防范方法(mysql注入高级)
- T-SQL篇如何防止SQL注入的解决方法
- ASPSQL防注入的方法
- PHPhasencounteredanAccessViolation错误的解决方法
- PHP中防止SQL注入攻击和XSS攻击的两个简单方法
- PHP利用str_replace防注入的方法
- Node.js中安全调用系统命令的方法(避免注入安全漏洞)
- PHP中防止SQL注入方法详解
- win7中C#的winForm编程使用savefiledialog不能弹出保存窗体的解决方法
- Python实现Linux下守护进程的编写方法