Groovy方法注入

xiaoxiao2021-02-28  93

//分类注入 //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/")

转载请注明原文地址: https://www.6miu.com/read-43914.html

最新回复(0)