//分类注入 //1 class Req{ static def get(String self){ self.toURL().text } } use(Req){ println "https://www.baidu.com/".get() } //2 @groovy.lang.Category(String) class StringUtil{ def get(){ toURL().text } } //加载顺序右后到先 StringUtil-Req-本身的方法 use(Req,StringUtil){ println "https://www.baidu.com/".get()}
//直接给类注入方法 String.metaClass.get = { delegate.toString().toURL().text } println "https://www.baidu.com/".get() //给类注入静态方法 def str = "https://www.baidu.com/" String.metaClass.'static'.printClass = { println delegate } String.printClass() //注入构造函数 String.metaClass.constructor = { Calendar calendar-> new String(calendar.getTime().toString()) } println new String(Calendar.instance) //多方法一起注入 String.metaClass{ get = { delegate.toString().toURL().text } 'static'{ printlnClass = { println delegate } } constructor = { Calendar calendar-> new String(calendar.getTime().toString()) } } //另一种写法 def emc = new ExpandoMetaClass(String) emc.get = { delegate.toString().toURL().text } emc.initialize() String.metaClass = emc println str.get() println String.metaClass //groovy.lang.ExpandoMetaClass //制空 回到最开始 就调用不到get方法了 String.metaClass = null println String.metaClass // groovy.runtime.HandleMetaClass//混合方法注入 class Get{ def get(String url){ url.toString().toURL().text } } //String.mixin(Get) String.metaClass.mixin(Get) println "".get("https://www.baidu.com/")
Groovy方法注入
最新推荐文章于 2021-12-21 11:22:27 发布