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/")


<think>好的,我现在需要回答用户的问题:如何在Groovy中调用外部方法,并提供示例。首先,我需要回顾用户提供的引用资料,看看有哪些相关信息可以利用。 用户给出的引用[1]是关于在Groovy脚本中调用Spring Boot的Service方法,使用了Binding和GroovyShell。引用[2]和[3]提到了Groovy类成员访问方式及闭包中调用方法,引用[4]则涉及闭包创建接口对象。不过用户的问题更偏向于调用外部方法,可能包括普通方法、静态方法或Spring管理的Bean方法。 首先,我需要整理几种常见的Groovy调用外部方法的情况。比如,直接调用其他Groovy脚本中定义的方法,或者调用Java类中的方法,以及通过Spring上下文获取Bean的方法。根据引用[3],闭包中可以调用同一脚本中的方法,这可能是一个点。而引用[1]中的示例展示了如何通过ApplicationContext来获取Spring管理的Bean,进而调用其方法。 接下来,我应该分步骤说明不同的调用方式,并给出相应的代码示例。例如,第一种情况是调用同一脚本中的方法,第二种是调用其他Groovy脚本中的方法,第三种是调用Java静态方法,第四种是调用Spring Bean的方法。每种情况都需要具体的代码示例,确保用户能够理解并应用。 需要注意用户提到的示例是否正确,以及是否符合Groovy的语法规则。例如,在调用其他脚本的方法时,可能需要使用GroovyShell或类加载器来加载脚本。同时,在Spring环境下,如何正确注入ApplicationContext并获取Bean也是关键点。 另外,用户可能对闭包中调用外部方法感兴趣,但根据引用[3],闭包可以直接调用所在脚本的方法,这点可以作为补充说明。不过主要应集中在用户的问题上,即如何调用外部定义的方法,可能需要跨脚本或类的情况。 最后,生成的相关问题需要围绕用户可能的后续疑问展开,比如参数传递、异常处理、性能优化等。这可以帮助用户更深入地理解相关主题。</think>在Groovy中调用外部方法可以通过多种方式实现,以下是具体场景和示例: ### 一、调用同一脚本中的方法 ```groovy // 定义方法 def externalMethod() { println "调用了外部方法" } // 直接调用 externalMethod() //输出:调用了外部方法 ``` ### 二、调用其他Groovy脚本中的方法 创建`Utils.groovy`文件: ```groovy class Utils { static String formatText(String str) { return "[处理结果] $str" } } ``` 调用示例: ```groovy // 加载脚本并调用静态方法 def utilsClass = new GroovyClassLoader().parseClass(new File("Utils.groovy")) def result = utilsClass.formatText("测试文本") println result //输出:[处理结果] 测试文本 ``` ### 三、调用Java类方法 创建Java类`MathUtil.java`: ```java public class MathUtil { public static int square(int n) { return n * n; } } ``` Groovy调用示例: ```groovy // 调用静态方法 println MathUtil.square(5) //输出:25 ``` ### 四、调用Spring Bean方法(结合引用[1]) ```groovy // 通过Spring上下文获取Bean def userService = applicationContext.getBean("userService") // 调用Bean方法 def userList = userService.findAllUsers() ``` ### 五、动态脚本调用(结合引用[3][4]) 通过闭包执行外部方法: ```groovy def externalAction = { param -> "处理参数:$param" } // 调用闭包 println externalAction("数据123") //输出:处理参数:数据123 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值