文章目录

  • 一、使用 @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 注解进行方法注入 | 分类注入方法查找优先级 )相关推荐

  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 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 使用 MetaClass 进行方法拦截 | 对象上拦截方法 | 类上拦截方法 )

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

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

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

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

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

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

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

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

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

最新文章

  1. Java多线程 - AQS详解
  2. 看到一个词语提取小工具,分享给有标签、词库需求的同学们
  3. python处理大型矩阵_在python中处理大型密集矩阵
  4. 022_Table表格
  5. 前端技巧:遍历数组都有哪些方式呢?
  6. 安全和anti-sapm的HTML5效果如何
  7. C#进阶系列——一步一步封装自己的HtmlHelper组件:BootstrapHelper(三:附源码)...
  8. 谈谈 Linux 假死现象
  9. 荷兰国旗问题(C语言)
  10. 如何解决 Win10 卡顿的问题
  11. 「缠师课后回复精选」第15课:没有趋势,没有背驰。
  12. Excel·VBA考勤打卡记录统计结果
  13. MySQL 安装 + 入门大全 + 常用命令合集
  14. IEEE 802.11标准协议下载
  15. android 方法映射,高通Android平台驱动层 MSM8916 键值映射方法
  16. pthread之如何正确的终止正在运行的子线程
  17. Java项目开发,学生信息管理系统
  18. python bp神经网络 异或_两层神经网络输出异或
  19. Git代码版本控制工具
  20. 一行代码搞定Http请求,强得离谱~

热门文章

  1. DJANGO用户名认证一例
  2. 运维中心建设--数据管理
  3. 关于需求和架构的典型问题
  4. Android Service学习之本地服务
  5. Loading class `com.mysql.jdbc.Driver'. This is deprecated警告处理
  6. etcd 集群故障(数据变成只读)
  7. 使用markdown编辑evernote(印象笔记)的常用方法汇总
  8. js事件技巧方法整合
  9. win7 64 下安装ubuntu14.04
  10. 负margin的移位参考线