文章目录 前言 一、Groovy 配置文件格式 二、Groovy 配置文件读取 二、完整配置文件及解析代码示例 前言 在 Groovy 脚本 , Groovy 类 , Java 类中 , 可以调用 Groovy...脚本 ; 一、Groovy 配置文件格式 ---- Groovy 中的配置文件 , 也是定义在 " .groovy " 脚本中的 ; 下面的写法 , student { name = "Tom...配置文件读取 ---- Groovy 配置文件读取 , 创建 ConfigSlurper 对象 , 使用 parse 方法 , 解析指定的配置文件 , 注入传入的是 URL 对象 ; // 解析 Config.groovy...形式 , 读取 student 下的 name 属性配置 ; 代码示例 : // 解析 Config.groovy 配置文件 def config = new ConfigSlurper()...: // 解析 Config.groovy 配置文件 def config = new ConfigSlurper() .parse( new File
如果决定覆盖一个操作符去做一些非常规的事情,请一定要清楚地记录下您的工作。对 Groovy 类进行改进,支持重载非常简单。小心应对并记录所做的工作,对于由此而来的方便的简写形式来说,代价非常公道。...ConfigSlurper是Groovy中的一个实用程序类,用于编写属性文件,例如用于执行配置的脚本。...转换为Java属性文件和从Java属性文件转换 您可以将ConfigSlurper配置转换为Java属性文件或从Java属性文件转换。...如果String本身小于固定宽度,则用空格或我们定义的任何其他字符或字符串填充空格。 我们可以填充字符串的左侧或右侧或左右两侧,并将字符串放在中心。...中,我们使用=~运算符(查找运算符)来创建新的匹配器(Matcher)对象。
作为一种动态语言,Groovy自然实现了这一特性,例如,当声明一个变量时: String aString = 'zinyan.com' //声明了一个变量字符串...//我们调用这个字符串的大小写转换方法并输出 println aString.toUpperCase() //输出:ZINYAN.COM 在Groovy中,我们可以通过可选类型关键字:def 来代替...建议在这里使用def关键字来描述一个方法的意图,该方法应该适用于任何类型,但从技术上讲,我们可以使用Object,结果是一样的:在Groovy中,def严格等同于使用Object。...中,除了声明类型之外,我们不能对对象的类型做出任何假设,即使我们知道它,也无法在编译时确定将调用什么方法,或者将检索哪个属性。...方法调用在编译时解析,这意味着如果没有在类上声明方法,编译器将抛出错误 通常,在静态语言中查找的所有编译时错误都会出现:方法未找到、属性未找到、方法调用的不兼容类型、数字精度错误等… 下面让我们描述类型检查器在各种情况下的行为
表达式是Groovy程序的构建块,用于引用现有值并执行代码以创建新值。 2....对于POJO,对象图通常由通过对象实例化和组合编写的程序构建;对于XML处理,对象图是解析XML文本的结果,通常使用XmlParser或XmlSlurper等类。...this.class.methods.name:对Method数组的每个元素应用属性访问器,并生成结果列表。 this.class.methods.name.grep(...)...:对this.class.methods生成的列表的每个元素调用方法grep并生成结果列表。 GPath表达式的一个强大特性是,集合的属性访问被转换为集合中每个元素的属性访问,结果被收集到集合中。...*Bar/).sort()[1] PS: 1.grep()方法是一个正则表达式方法,用于查找字符串,方法中的传参是正则匹配哦。 2.在GPath表达式中,数组访问从零开始。
closure2() 上述代码执行结果 : 执行上述代码后 , 两个闭包都执行的是 Groovy 脚本中的 fun 方法 ; 即使 closure2 闭包设置的是 Test 实例对象作为代理 , 其仍然执行的是...** * 使用此resolveStrategy集,闭包将只解析委托的属性引用和方法,并完全绕过所有者。.../** * 使用此resolveStrategy集,闭包将解析自身的属性引用, * 并执行通常的元类查找过程。...* 这意味着属性和方法既不能从所有者也不能从委托解析, * 只能在闭包对象本身上解析。 * 这允许开发人员使用闭包本身的ExpandoMetaClass覆盖getProperty。... * 请注意,总是首先查找局部变量,与解析策略无关。
基本数据类型都是和Java 中的一致,就不拿出来说了。下面说一下,对象,字符串,闭包等; 另外:Groovy 中的分号是可以省略的; 字符串 使用单引号和双引号都可以定义一个字符串常量。...} } 执行 character gradle character 得到结果如下 单引号双引号都是字符串 name is 张三; age is 19 ; address is 北京市 单引号里无法运算表达式例如...entry -> if(entry.key.equals('blue')){ return entry.value } return null } println "查找的结果是...}else{ return b } } return 是可以省略的 Groovy 会把执行过程中的最后一句代码作为返回值 /* * 返回大的那个 */ def max(int.../gradle 或者 gradlew 命令,必须是要安装Gradle 并设置过环境变量的,当然在Gradle所在的目录也是可以的。
因为在Groovy中,对字符串取反比较。其实就是判断了字符串是否为空字符串,根据是否为空返回boolean值,然后再进行取反。...安装上面的插件并正确使用的前提条件是,需要安装Java SDK ,Groovy SDK 并配置好环境变量才行哦。...(PS:需要Groovy3+以上版本才能使用),运算符::: 而我们从java转Groovy中很容易造成无法理解代码的地方,就在于Groovy中新增的各种对象运算符。...PS:Groovy中的类的属性的get和set方法会在编译的时候自动创建。...参数在运行时解析,这意味着如果您有多个同名的方法,语法没有不同,只有要调用的适当方法的解析才会在运行时完成。
这里在 ConfigSlurper 的构造函数里传入从命令行里取到的-P 的参数。...调用 loadGroovy 方法就可以加载项目根目录下的 config.groovy 文件,并作为一个 Map 返回,这样就可以通过 jdbc.url 来获取 url 的值。...这段代码会初始化执行 SQL 的 groovy.sql.Sql 对象,然后按照分号(;)分割 SQL 脚本文件里的每一条 SQL 并执行。...对于 Gradle 没有提供的代码检查工具,我们可以有两种选择:第一就是自己实现一个 Gradle 插件,第二就是调用 Ant 任务,让 Ant 作为一个媒介去调用在 Ant 中已经有的代码检查工具,比...另外,当在 Respository 无法找到 Jar 包时(如数据库的 driver),就可以将这些 Jar 包放在项目的一个子目录中,然后让项目管理依赖。
Groovy与 Java可以很好的互相调用并结合编程 ,比如在写 Groovy 的时候忘记了语法可以直接按Java的语法继续写,也可以在 Java 中调用 Groovy 脚本。...2.Groovy编写和调试 Groovy的代码可以在Android Studio和IntelliJ IDEA等IDE中进行编写和调试,缺点是需要配置环境,这里推荐在文本中编写代码并结合命令行进行调试(文本推荐使用...如果想要以key变量的值为键值,需要像注释2处一样使用(key),用来告诉解析器我们传递的是一个变量,而不是定义一个字符串键值。...参数列表部分是可选的,如果闭包只有一个参数,参数名是可选的,Groovy会隐式指定it作为参数名,如下所示。...,如果碰到哪里不会再去查找Groovy 官方文档和Groovy API文档。
3、 支持DSL(Domain Specific Languages领域定义语言)和其它简洁的语法,让代码变得易于阅读和维护。...,在闭包内创建的变量在闭包被调用的范围内同样可以被引用, 闭包可以保存在变量中并被作为参数传递到方法中。...但作为另一种语言,可以使用更Groovy的方式定义类,这样的好处是,可以少写一半以上的javabean代码。...在没有经过明确的编译过程即执行时,groovy将通过文件名来查找类。在这种情况下,名称将会很重要。Groovy只能找到那些和文件名匹配的类。...在找到这种名字匹配的类时,找到的文件中定义的其他类将被解析并变得对groovy可见。 参考资料 1.http://baike.baidu.com/item/Groovy?sefr=enterbtn
但是闭包,让Groovy这门语言具有了强大的功能。如果你希望构建自己的领域描述语言(DSL),Groovy是一个很好的选择。Gradle就是一个非常成功的例子。...有几种属性解析策略,帮助我们解析闭包中遇到的属性和方法引用。...我们可以使用闭包的resolveStrategy属性修改策略。 Closure.OWNER_FIRST,默认策略,首先从owner上寻找属性或方法,找不到则在delegate上寻找。...Groovy文档有详细的代码例子,说明了这几种策略的行为。这里就不再细述了。 函数式编程 GString的闭包 先看下面的例子。我们使用了GString的内插字符串,将一个变量插入到字符串中。...gs == 'x = 2' 如果我们希望字符串的结果随着变量的改变而改变,需要将${x}声明为闭包。这样,GString的行为就和我们想的一样了。
闭包 闭包是Groovy中一个强大而有用的特性,它可以简化代码并实现更灵活的编程。闭包是一个可以作为参数传递给方法或存储在变量中的代码块。...字符串处理 字符串插值 Groovy中的字符串可以使用插值语法,方便地将变量的值嵌入到字符串中。...通过GroovyClassLoader,我们可以加载Groovy脚本或Groovy类,并使用其实例来调用方法和访问属性。...方法来解析Groovy脚本并生成相应的类。...然后,我们通过实例化该类来获得一个GroovyObject,并使用setProperty方法设置属性的值。最后,我们通过invokeMethod方法调用方法并执行Groovy代码。
闭包闭包是Groovy中一个强大而有用的特性,它可以简化代码并实现更灵活的编程。闭包是一个可以作为参数传递给方法或存储在变量中的代码块。...字符串处理字符串插值Groovy中的字符串可以使用插值语法,方便地将变量的值嵌入到字符串中。...通过GroovyClassLoader,我们可以加载Groovy脚本或Groovy类,并使用其实例来调用方法和访问属性。...方法来解析Groovy脚本并生成相应的类。...然后,我们通过实例化该类来获得一个GroovyObject,并使用setProperty方法设置属性的值。最后,我们通过invokeMethod方法调用方法并执行Groovy代码。
普通的Java字符串是不变的,而GString是可变的。另外它们的哈希值也不同。因此在使用Map等数据类型的时候需要格外注意,避免使用GString作为Map的键。 字符 Groovy没有字符字面量。...如果将一个变量直接作为Map的键的话,其实Groovy会用该变量的名称作为键,而不是实际的值。如果需要讲变量的值作为键的话,需要在变量上添加小括号。...方法引用的实际类型是Groovy的闭包Closure。这种运算符可以将方法作为参数,让Groovy语言非常灵活。...使用def关键字的时候,变量类型由编译器自动推断,无法推断时就是Object类型。 Groovy可以同时声明多个变量。...闭包还可以作为方法参数传递到其他地方,这让闭包更加灵活。
Groovy特点: Groovy完全兼容Java的语法 分号是可选的 类、方法默认是public的 编译器给属性自动添加getter/setter方法 属性可以直接用点号获取 最后一个表达式的值会被作为返回值...== 等同于Java的equals(),并且不会有空指针异常 Groovy特性的高级特性: 支持assert语句 支持可选类型定义 可选的括号 支持三种字符串 拥有集合API 支持闭包 ---- 构建脚本介绍...项目(project)主要的三个属性分别是group、name、version,就好比于maven中的groupId、artifactId、version,是作为组件的坐标存在的 项目(project...选择本地的Gradle: ? 项目创建好后,打开Gradle控制台: ? 我们先来使用Java语法进行编写,代码及运行结果如下: ? 如果使用groovy语法进行编写的话,将会简单很多。...代码及运行结果如下: ?
bean 的 toString 方法,在系统控制台上进行了结果的打印。...这样做让人们根据环境特定的属性来部署应用,如数据库 URLs 和密码,没有了修改主配置 XML 文件或者容器文件的复杂和风险。.../jdbc.properties"/> PropertyPlaceholderConfigurer 不仅在你限定的 Properties 文件里查找属性。...fallback(1):如果在给定属性文件没有解析到,就检查系统属性。这是默认的行为。 override(2):在解析特定属性文件之前,首先检查系统属性。这使得系统属性可以覆盖任何其他属性源。...,则在创建 bean 时,bean 的解析会失败。
这个例子展示了一个定制BeanPostProcessor实现,实现中调用了每一个bean的toString()方法。当容器创建它时,会将结果字符串输出到系统控制台。...:9002 jdbc.username=sa jdbc.password=root 因此,在运行是字符串${jdbc.username}被替换为sa,其它的匹配属性文件中的key的占位符的值以同样方式替换...默认情况下,如果不能在指定属性文件中找到属性,它也检查Java System属性。你可以通过下面三个支持的整数值中的一个设置配置器的systemPropertiesMode属性,从而定制查找行为。...never (0): 从不检查system属性 fallback (1): 如果不能在指定文件中解析属性,检查system属性,这是默认值。...override (2): 在查找指定文件之前,首先检查system属性,这可以使系统属性覆盖任何其它属性源。 更多信息请看PropertyPlaceholderConfigurer文档。
一般来说,我们不应该使用该方法,因为它将创建一个名称为String的类节点,但没有在其上定义任何方法、任何属性等。第一个版本返回已解析的类节点,而第二个版本返回未解析的类节点。...2.4 抛出错误 要抛出一个类型检查错误,你只需要调用addStaticTypeError方法,它有两个参数: 将显示给最终用户的字符串形式的消息 负责错误的AST节点。...以Grails动态查找器为例。可以有一个由名为findByName(…)的方法组成的方法调用。 由于bean中没有定义findByName方法,类型检查器会报错。...isGenerated:接受MethodNode作为参数,并告知该方法是否是由类型检查器扩展使用newMethod 方法生成的方法 isAnnotatedBy: 接受一个AST节点和一个类(或ClassNode...例如: isAnnotatedBy(node, NotNull) getTargetMethod: 接受一个方法调用作为参数,并返回类型检查器为其确定的 MethodNode delegatesTo:
可以在依赖项声明和configurations{}块中为配置名使用字符串字面量。 在这种情况下,IDE无法帮助你发现可用的配置,但你可以在相应的插件文档或运行gradle依赖项中查找它们。...注意,有必要显式指定任务的类型,否则脚本将无法编译,因为推断的类型将是task,而不是Test,并且testLogging属性特定于Test任务类型。...获取对名为assemble的现有(非类型化)任务的引用并配置它—您只能使用此语法配置task上可用的属性和方法 注册一个名为myTask2的新非类型化任务并配置它——在这种情况下,您只能配置task上可用的属性和方法...要从Kotlin调用Groovy扩展方法,可以采用相同的方法:将其作为静态函数调用,将接收方作为第一个参数传递。...调用methodName方法,并传递一些参数 配置blockName属性,映射到一个接受方法调用的Closure 调用另一个接受命名参数的方法,映射到一个Groovy命名参数Map<String, ?
Groovy的特性虽然不多,但也有一些,我们不可能在这里都讲完,这也不是这本书的初衷,在这里我挑一些和Gradle有关的知识讲,让大家很快的入门Groovy,并且能看懂这门脚本语言,知道在Gradle为什么这么写...字符串 字符串,每一门语言都会有对字符串的处理,Java相对要稍微复杂一些,限制比较多,相比而言,Groovy非常方便,比如字符串的运算、求值、正则等等。...集合 集合,也是我们在Java中经常用到的,Groovy完全兼容了Java的集合,并且进行了扩展,使得生命一个集合,迭代一个集合、查找集合的元素等等操作变得非常容易。...代码块是可以作为参数传递的 代码块–一段被花括号包围的代码,其实就是我们后面要将的闭包,Groovy是允许其作为参数传递的,但是结合这我们上面方法的特性,最后的基于闭包的方法调用就会非常优雅、易读。...在Groovy中,并不是一定要定义成员变量,才能作为类的属性访问,我们直接getter/setter方法,也一样可以当做属性访问。
领取专属 10元无门槛券
手把手带您无忧上云