Groovy元编程:运行时与编译时的强大能力
1. 运行时元编程技术回顾
Groovy的元编程提供了多种方法来拦截、注入和合成方法,下面是不同场景下的技术选择:
- 方法拦截
- 若有修改类源代码的权限,可在要拦截方法调用的类上实现 GroovyInterceptable 接口,只需实现 invokeMethod 方法。
- 若无法修改类或类为Java类,可使用 ExpandoMetaClass 或类别(categories)。 ExpandoMetaClass 更具优势,因为一个 invokeMethod 就能拦截类的任何方法;而类别则需要为每个被拦截的方法单独编写方法,且受 use 块限制。
- 方法注入
- 可使用类别或 ExpandoMetaClass 。类别在方法注入方面表现出色,能控制方法注入的位置,可通过不同类别实现不同版本的方法注入,还能轻松嵌套和混合多个类别。但类别注入的方法仅在 use 块内生效且限于执行线程。若想在任意位置使用注入的方法,或注入静态方法和构造函数, ExpandoMetaClass 是更好的选择,不过它不是Groovy的默认 MetaClass 。此外,使用 ExpandoMetaClass 可将方法注入到类的特定实例,而不影响整个类
超级会员免费看
订阅专栏 解锁全文

65

被折叠的 条评论
为什么被折叠?



