【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 同时注入普通方法、静态方法、构造方法 )
生活随笔
收集整理的這篇文章主要介紹了
【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 同时注入普通方法、静态方法、构造方法 )
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 一、同時注入普通方法、靜態方法、構造方法
- 二、完整代碼示例
一、同時注入普通方法、靜態方法、構造方法
如果要同時為 Groovy 類注入大量方法 , 使用 Category 分類 或 MetaClass 將每個方法逐個注入 , 這樣操作比較繁瑣 ;
同時為 Groovy 類注入多個方法 , 可以使用 metaClass 方法實現 , 該函數的原型如下 :
public static MetaClass metaClass(Class self, Closure closure) {MetaClassRegistry metaClassRegistry = GroovySystem.getMetaClassRegistry();MetaClass mc = metaClassRegistry.getMetaClass(self);if (mc instanceof ExpandoMetaClass) {((ExpandoMetaClass)mc).define(closure);return mc;} else if (mc instanceof DelegatingMetaClass && ((DelegatingMetaClass)mc).getAdaptee() instanceof ExpandoMetaClass) {((ExpandoMetaClass)((DelegatingMetaClass)mc).getAdaptee()).define(closure);return mc;} else if (mc instanceof DelegatingMetaClass && ((DelegatingMetaClass)mc).getAdaptee().getClass() == MetaClassImpl.class) {ExpandoMetaClass emc = new ExpandoMetaClass(self, false, true);emc.initialize();emc.define(closure);((DelegatingMetaClass)mc).setAdaptee(emc);return mc;} else if (mc.getClass() == MetaClassImpl.class) {MetaClass mc = new ExpandoMetaClass(self, false, true);mc.initialize();((ExpandoMetaClass)mc).define(closure);metaClassRegistry.setMetaClass(self, mc);return mc;} else {throw new GroovyRuntimeException("Can't add methods to custom meta class " + mc);}}使用規則如下 :
類名.mateClass {// 注入普通方法普通方法名 = {閉包}// 注入靜態方法'static' {靜態方法名 = {閉包}}// 注入構造方法constructor = {構造方法參數列表 ->構造方法內容要返回的實例對象} }為下面的 Student 類 , 同時注入 普通方法、靜態方法、構造方法 ;
class Student {def name; }注入方法如下 :
// 注入多個類型的方法 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)} }二、完整代碼示例
完整代碼示例 :
class Student {def name; }// 注入多個類型的方法 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)} }// 調用注入的靜態方法 Student.fun()// 使用注入的構造方法初始化 Student 類 def student = new Student("Tom")// 調用注入的普通方法 student.hello() student.say()執行結果 :
Class Type : class Student Hello Tom My name is Tom 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 同时注入普通方法、静态方法、构造方法 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Groovy】MOP 元对象协议与元编
- 下一篇: 【Groovy】MOP 元对象协议与元编