文章目录

  • 一、扩展方法示例
  • 二、静态扩展方法配置
  • 三、编译静态扩展类
  • 四、打包静态扩展类字节码到 jar 包中
  • 五、测试使用 Thread 静态扩展类

一、扩展方法示例


Thread 扩展 hello 方法 , 在该方法中传入 Closure 参数 , 在该方法中 , 执行传入的闭包参数 ;

class ThreadExt {public static Thread hello(Thread self, Closure closure) {closure()return self}}

二、静态扩展方法配置


在 工程根目录\src\main\groovy\ 目录下创建 manifest\META-INF\services 目录 ,

在 工程根目录\src\main\groovy\manifest\META-INF\services 目录下 , 创建 org.codehaus.groovy.runtime.ExtensionModule 配置文件 , 配置如下内容 :

moduleName=groovyExt
moduleVersion=1.0
staticExtensionClasses=ThreadExt

moduleName 是模块名称 , 可以配置一个任意字符串标识符 ,

moduleVersion 是模块版本 ,

staticExtensionClasses 用于配置 静态扩展方法 , extensionClasses 用于配置 实例扩展方法 ;

这里配置的是 静态扩展方法 ;

配置完成后的项目结构如下 :

三、编译静态扩展类


在 Terminal 面板中 , 执行

cd src/main/groovy

命令 , 进入到 src/main/groovy 目录中 ,

然后执行

groovyc -d classes ThreadExt.groovy

命令 , 编译 ThreadExt.groovy 源码到 classes 目录中 ; 其中 ThreadExt.groovy 中定义了 Thread 类的扩展方法 ;

编译过程及结果如下 :

四、打包静态扩展类字节码到 jar 包中


在 执行

jar -cf thread.jar -C classes . -C manifest/ .

命令 , 将 classes 中的字节码文件按照 manifest/ 规则 , 打包到 thread.jar 文件中 ;

五、测试使用 Thread 静态扩展类


创建一个 Groovy 脚本 , 执行为 Thread 扩展的静态方法 hello 方法 ;

Thread.hello{printf "Hello"
}

在 Terminal 面临中 , 使用命令行执行该 Groovy 脚本 ,

groovy -classpath thread.jar ThreadExtApplication.groovy

执行结果为 :

Hello

【Groovy】Groovy 扩展方法 ( 静态扩展方法配置 | 扩展方法示例 | 编译静态扩展类 | 打包静态扩展类字节码到 jar 包中 | 测试使用 Thread 静态扩展类 )相关推荐

  1. 【Groovy】Groovy 扩展方法 ( 实例扩展方法配置 | 扩展方法示例 | 编译实例扩展类 | 打包实例扩展类字节码到 jar 包中 | 测试使用 Thread 实例扩展方法 )

    文章目录 一.扩展方法示例 二.实例扩展方法配置 三.编译实例扩展类 四.打包静态扩展类字节码到 jar 包中 五.测试使用 Thread 实例扩展方法 一.扩展方法示例 为 Thread 扩展 he ...

  2. java byte 拓展_Java项目中如何扩展第三方jar包中的类?

    有些时候你对第三方得到jar包中的类并不是很满意,想根据实际情况做一些扩展.如果说第三方的jar包已经提供了一些可扩展的类,比如提供了Interceptor,Filter或者其他的类,那么使用原生的比 ...

  3. java执行jar中的main_浅谈java 执行jar包中的main方法

    浅谈java 执行jar包中的main方法 通过 OneJar 或 Maven 打包后 jar 文件,用命令: java -jar ****.jar 执行后总是运行指定的主方法,如果 jar 中有多个 ...

  4. Web项目替换jar包中的文件的方法

    经常遇到这样的问题,需要修改jar包中的方法.应该如何做? 1.有些很人性化的框架jar包,比如SpringSecurity,可以修改配置文件指定一个新建的类,让类实现Jar包中的对应的接口就好了. ...

  5. 通过 getResources 找不到jar包中的资源和目录的解决方法

    http://my.oschina.net/sub/blog/184074 今天碰到一个怪问题: 原本跑的好好的代码,打成 jar 包就不能运行了. 问题出在,代码中有一段自动扫描 classpath ...

  6. java读取同包文件_Java实现从jar包中读取指定文件的方法

    本文实例讲述了Java实现从jar包中读取指定文件的方法.分享给大家供大家参考,具体如下: 以下的Java代码实现了从一个jar包中读取指定文件的功能: /** * This class implem ...

  7. 使用反射获得jar包中的类、方法、参数、返回值类型,然后动态加载jar包运行方法

    其实我的需求是在系统中 测试用户导入的jar包,所有网上找了很多解决方案,踩过很多坑,再加上以前搞c++的,对java不是很熟, 这里特意记录下,算是基本满足需求了 使用反射获得jar包中的类.方法. ...

  8. Java操作Access数据库使用方法及案例 及 所需jar包【源码及jar包在最后下载】

    目录 写在前面 数据库编辑软件MDBplus.exe SQL查询语句的差异 字符串转数字 字符串转日期 示例:如下图打开SQL编辑窗口 源码及jar包下载地址 写在前面 最近接了一个项目,就是个简单的 ...

  9. java打包成jar|执行jar包中的main方法

    java打包成jar jar -cvf [jar包的名字] [需要打包的文件] 执行jar包中的main方法 java -jar ****.jar 执行后总是运行指定的主方法,如果 jar 中有多个 ...

最新文章

  1. SQL优化这么做就对了
  2. 女人跳槽:最重要的是你的独立,你的快乐
  3. C语言二月天数计算,关于计算两个日期间天数的代码,大家来看看
  4. elasticsearch java_java Elasticsearch详细介绍及使用实例分析
  5. linux钩子函数和回调函数,Linux Kernel 学习笔记10:hook函数
  6. SQL Server provider: SQL 网络接口, error: 26 - 定位指定的服务器/实例时出错
  7. 文档开发工具调研总结
  8. 小红书面试题——paddingNum,用逗号分割数字串
  9. encodeURL() vs encodeRedirectURL()
  10. 常用Linux网络/内存/磁盘分析工具
  11. [转载] python异常和错误有什么区别_python的错误和异常
  12. 跨境网上收款 找PayPal没错(获取Client ID 和 secret)
  13. 如何重启 Windows 10 子系统(WSL) ubuntu
  14. 小红伞杀毒软件|小红伞杀毒软件下载
  15. TCPUDP测试工具
  16. uni-app自动定位当前位置
  17. 计算机控制系统机器人,机器人的控制系统
  18. 那些我们想当然的错误[SQL]
  19. Monyer's Game 0~5关过关方法
  20. 楚留香服务器维护时间,2019年8月9日官方维护公告

热门文章

  1. handler消息机制
  2. [Ubuntu] 如何在Ubuntu11.04将PHP5.3降级到PHP5.2
  3. 自己动手构建iSCSI磁盘阵列
  4. 石川es6课程---1-2、ES6简介
  5. 20秒搭建web服务器,跨平台(mac,window)
  6. undefined 和null的区别?
  7. spring入门(一)
  8. 【转】Impala导出查询结果到文件
  9. pycharm Python解释器的配置--可以指定批处理文件为解释器
  10. noip2016 小结(ac两题+学习总结)