我是靠谱客的博主 彪壮期待,最近开发中收集的这篇文章主要介绍Groovy语法学习(八)MOP探索之动态类与方法注入,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

groovy作为一门动态语言,使用非常灵活。MOP中提供了动态类与运行时的方法注入,整理了一下使用方法。

一、动态类


def expando =new Expando(name:"hello",fun1:{println "fun1"})

println expando.name

//这里这样使用依然会报错,相信也是只生成了方法
//println expando.@name
expando.fun1()
expando.age=14
println expando.age


expando.fun2={
    println "fun2"
}

expando.fun2()

结果:

hello
fun1
14
fun2

二、方法注入

方法注入在groovy中有三种形式。

  • 1、metaclass
  • 2、category
  • 3、 mixin

分别看一下使用方法

(一) metaClass

对于metaClass其实上一篇文章有过简单的使用。其实使用非常简单。
添加静态方法与普通方法

String.metaClass.printSelf={
    //delegate是实例
    println delegate
}
"123".printSelf()

String.metaClass.'static'.testHello={
    println 'hello'
}

String.testHello()

class ABC{
    int i=5

}

String.metaClass.constructor={
    ABC it->
        new String("$it.i")
}

println new String(new ABC())

结果:

123
hello
5

多个方法一并注入



String.metaClass{
    printSelf = {
        //delegate是实例
        println delegate
    }
    'static' {
        testHello = {
            println 'hello'
        }
    }
    constructor = {
        ABC a ->
            new String("$a.i")
    }
}
String.testHello()

结果就不多做演示了,基本和上面的类似。
关于metaClass其实还有其他细节,这篇文章的metaClass总结的十分详细,可以直接看一看。
https://blog.csdn.net/qjbagu/article/details/49735255

(二) 使用分类进行注入

这种方式需要使用use进行,直接写类名和类名.class是一样的。

class ExMethod{
    static def log(String self) {
        println self
    }
}

use(ExMethod){

    "123".log()
}

@Category(String)
class ExMethod1{
     def log() {
        println this
    }
}
use(ExMethod1){
    "256".log()
}

结果:

123
256
(三)使用mixin进行注入
class Get{

    def get(String url){
        url.toURL().text;
    }

}


String.mixin(Get)

println "".get("http://www.baidu.com")

结果:

<!DOCTYPE html>.....

使用mixin注解

class Helper {
    def work() {
        println "$name is working"
    }
}
@Mixin(Helper)
class AGroovyClass {
    def getName() { "AGroovyClass" }
}
new AGroovyClass().work() // AGroovyClass is working

结果:

AGroovyClass is working

方法注入基本上已经写完了,接下来是方法合成以及委托。

最后

以上就是彪壮期待为你收集整理的Groovy语法学习(八)MOP探索之动态类与方法注入的全部内容,希望文章能够帮你解决Groovy语法学习(八)MOP探索之动态类与方法注入所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部