Groovy方法注入

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值