【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 @Category 注解进行方法注入 | 分类注入方法查找优先级 )
文章目录
- 一、使用 @Category 注解进行方法注入
- 二、分类注入方法查找优先级
- 三、完整代码示例
一、使用 @Category 注解进行方法注入
@Category 注解原型如下 :
@Documented
@Retention(RetentionPolicy.SOURCE)
@Target({ElementType.TYPE})
@GroovyASTTransformationClass({"org.codehaus.groovy.transform.CategoryASTTransformation"})
public @interface Category {Class value() default Object.class;
}
@Category 注解使用方法 : 声明注解时 , 传入 Class 类型 参数 , 表示这是要为哪个类注入方法 ;
@Category(Student.class)
class Hello2 {def hello() {System.out.println "Hello"}
}
二、分类注入方法查找优先级
使用多个分类进行方法注入时 , 如果方法分类中定义了相同的方法 , 则优先从左到右进行查找 , 下图示例中 , 先后声明了 Hello , Hello2
两个分类 , 在 use
代码块中调用了 hello
方法 , 那么按照倒序开始在分类列表中查找 hello
方法 , 如果在 Hello2
中查找到了 hello
方法 , 则使用该方法 ;
即使在 Hello
分类中定义了 hello
方法 , 也会被屏蔽 ;
如果类中已经存在了要注入的方法 , 但是分类中又注入了该方法 , 则优先使用分类中的方法 , 类自带的方法被屏蔽 ;
声明分类 Hello , Hello2
时 , 优先调用 Hello2 中的方法 ;
声明分类 Hello2 , Hello
时 , 优先调用 Hello 中的方法 ;
三、完整代码示例
完整代码示例 :
class Student {def name;
}class Hello {static def hello(Student self) {System.out.println "Hello ${self.name}"}
}@Category(Student.class)
class Hello2 {def hello() {System.out.println "Hello"}
}// use 代码块可以同时使用多个注入方法分类
use(Hello, Hello2) {new Student(name: "Tom").hello()
}
执行结果 :
Hello
【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 @Category 注解进行方法注入 | 分类注入方法查找优先级 )相关推荐
- 【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 元对象协议与元编程 ( 方法注入 | 使用 Category 分类注入方法 )
文章目录 一.方法注入 二.使用 Category 分类注入方法 三.完整代码示例 一.方法注入 在之前的博客中 , 主要是使用 Groovy 元编程 拦截方法 , 改变方法的实现 ; 使用元编程还可 ...
- 【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 使用 MetaClass 进行方法拦截 | 对象上拦截方法 | 类上拦截方法 )
文章目录 一.使用 MetaClass 进行方法拦截 1.使用 MetaClass 在单个对象上进行方法拦截 2.使用 MetaClass 在类上进行方法拦截 二.完整代码示例 1.对象方法拦截 2. ...
- 【Groovy】MOP 元对象协议与元编程 ( 方法合成 | 动态注入方法 )
文章目录 一.动态注入方法 二.完整代码示例 一.动态注入方法 调用 Student 类不存在的方法 , 如果该类重写了 def methodMissing(String name, def args ...
- 【Groovy】MOP 元对象协议与元编程 ( Groovy 类内部和外部分别获取 metaClass | 分析获取 metaClass 操作的字节码 | HandleMetaClass 注入方法 )
文章目录 一.Groovy 类内部和外部分别获取 metaClass 二.分析 Groovy 类内部和外部获取 metaClass 操作的字节码 三.使用 HandleMetaClass 注入方法 一 ...
- 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 同时注入普通方法、静态方法、构造方法 )
文章目录 一.同时注入普通方法.静态方法.构造方法 二.完整代码示例 一.同时注入普通方法.静态方法.构造方法 如果要同时为 Groovy 类注入大量方法 , 使用 Category 分类 或 Met ...
- 【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 重写 MetaClass#invokeMethod 方法实现函数拦截 | 实现函数调用转发 )
文章目录 一.重写 MetaClass#invokeMethod 方法实现函数拦截 二.在 MetaClass#invokeMethod 方法中调用对象的其它方法 三.完整代码示例 一.重写 Meta ...
最新文章
- Java多线程 - AQS详解
- 看到一个词语提取小工具,分享给有标签、词库需求的同学们
- python处理大型矩阵_在python中处理大型密集矩阵
- 022_Table表格
- 前端技巧:遍历数组都有哪些方式呢?
- 安全和anti-sapm的HTML5效果如何
- C#进阶系列——一步一步封装自己的HtmlHelper组件:BootstrapHelper(三:附源码)...
- 谈谈 Linux 假死现象
- 荷兰国旗问题(C语言)
- 如何解决 Win10 卡顿的问题
- 「缠师课后回复精选」第15课:没有趋势,没有背驰。
- Excel·VBA考勤打卡记录统计结果
- MySQL 安装 + 入门大全 + 常用命令合集
- IEEE 802.11标准协议下载
- android 方法映射,高通Android平台驱动层 MSM8916 键值映射方法
- pthread之如何正确的终止正在运行的子线程
- Java项目开发,学生信息管理系统
- python bp神经网络 异或_两层神经网络输出异或
- Git代码版本控制工具
- 一行代码搞定Http请求,强得离谱~