自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(36)
  • 收藏
  • 关注

原创 Groovy对Object的增强

Groovy 对 Object进行了统一的增强,本例子具体关注一下。 def a = 1..10println "any"a.any { println it ; it >5 }println "every"a.every { println it ; it >5 }println "each"a.each { println it}println "eachWithInd

2008-12-31 17:28:00 427

翻译 并发计算

 并发计算可以有效提高计算效率,尤其在多CPU情况下,本示例说明一种并发计算的实现方法。这个例子用来计算Fibonacci 数列。 import java.util.concurrent.*CUTOFF = 12    // 对太小的值不值得采用并发计算,所以设定一个限定值THREADS = 100println "Calculating Fibonacci sequence

2008-12-29 13:23:00 605

翻译 在多线程环境下使用AtomicInteger

Groovy和Java相容,支持多线程编程方面肯定没有什么问题,只是语法上更便利了些。本示例说明如何使用AtomicInteger来实现并发计数。 import java.util.concurrent.atomic.AtomicIntegerdef counter = new AtomicInteger()//打印输出方法,要同步!synchronized out(mes

2008-12-29 13:19:00 1976

翻译 使用Map或Expando来替代Mock

类似一篇文章的例子,假设我们要测试下面这个逻辑:class MyApp {    def factory    def logger    def doBusinessLogic(param) {        def myObj = factory.instance        myObj.doSomething(param)        myObj.doSomethingElse(pa

2008-12-28 21:54:00 336

翻译 用Closure来作为测试Mock

 使用Groovy提供的Closure可以非常方便地实现测试Mock .见下面示例: 首先定义几个接口:interface Logger { def log(message) }interface Helper { def doSomething(param) }interface Factory { Helper getInstance() } 测试的目标是下面这个M

2008-12-27 23:05:00 307

原创 each能够终止吗

我们知道,通过each可以非常方便的遍历数组或列表中的元素,那么each的过程,是能够被中止的吗?通过示例来研究一下://在list中找到一个元素int target = 2def list = 1..5 list.each{  println it if(it == target) {  return true;  //no use } } 可以发现,通过return t

2008-12-26 12:23:00 572

原创 如何从外部获取Class属性值得问题

 在Grails里,通过定义DomainClass来对业务对象建模,那么在进行代码生成的时候,是如何获得这些模型的呢?本文做一些初步的探讨。下面定义一个类: class A{  static def attr1 = "bar"   def attr2 = "foo" }通过脚本,如何能获得attr1, attr2的值呢。 最简单的方法: def a = ne

2008-12-25 13:12:00 513

原创 Groovy 中变量的作用域

 Groovy由于提供了Closure的支持,对变量作用域来说,和Java有些不同。主要体现为两点:1)Closure对外部局部变量有访问能力;2)脚本中隐含存在一个binding变量 通过例子来说明: 1)方法屏蔽外部局部变量String attribute = "bar"void aMethod(){  assert attribute == "bar" /

2008-12-24 12:20:00 1482

翻译 使用 methodMissing & propertyMissing

使用 methodMissing & propertyMissing自从版本1.5 ,Groovy开始支持 "methodMissing",熟悉MetaClass机制后,从这个名字不难看出这个是用来干什么的,就是当找不到某个方法的时候,这个方法就会被调用。一般说来,既然已经有invokeMethod了,那么为什么还要”多此一举“呢?下面是使用这个特性的一些准则:这个特性只发生在常规方法分配

2008-12-23 17:33:00 391

翻译 Function和Closure的区别

Groovy中,function和closure非常相似,不过还是有区别,通过示例来说明。1)函数体内不能访问上下文中通过def定义的变量a = 32 //def keyword not used for this one, 这个变量可以在下面的函数中访问到def c = there, d = yonderdef f(){  assert a == 32 //outer a vis

2008-12-22 12:12:00 566

翻译 MetaClass 深入研究-5

在对MetaClass有所了解之后,本篇重点看看ExpandoMetaClass 的灵活性。ExpandoMetaClass是一种MetaClass的实现,缺省情况下,一个自定义的类的MetaClass实现是MetaClassImpl,不过这个实现类并不稳定,见下面的示例。class A{  String text}def a1= new A(text: aBCdefG)assert a1

2008-12-21 21:52:00 298

原创 MetaClass 深入研究-4

本篇中将看到,通过invokeConstructor甚至可以修改构造函数的返回对象public class MyMetaClass extends DelegatingMetaClass{  MyMetaClass(Class theClass){    super(theClass)  }  Object invokeConstructor(Object[] arguments){    [] 

2008-12-21 21:51:00 250

翻译 MetaClass深入研究-3

本篇中将看到,与自定义的Class不同,如果设置Groovy内置的Class的MetaClass,将影响到所有该类的实例,不管是在什么时候创建的实例。public class MyMetaClass extends DelegatingMetaClass{  MyMetaClass(Class theClass){    super(theClass)  }  Object invokeMet

2008-12-21 00:44:00 276

翻译 MetaClass深入研究-2

//可以从从Class层面来设定MetaClass,示例如下:public class MyMetaClass extends DelegatingMetaClass{  MyMetaClass(Class theClass){    super(theClass)  }  Object invokeMethod(Object object, String methodName, Object

2008-12-21 00:41:00 267

原创 MetaClass深入研究-1

 缺省MetaClass的方法调用表现,有静态定义则走静态定义,没有静态定义则进行动态调用,见如下代码:class A{  def bark(){ A: invoked bark() }  def invokeMethod(String name, Object args){    "A: missing $name(${args.join(, )})"  }}def a= new A()

2008-12-19 17:47:00 294

翻译 仔细研究一下方法调用和属性存取

仔细研究一下方法调用和属性存取。通过为一个类添加方法 invokeMethod 可以有机会执行原本未定义的方法,示例如下。class MyClass{  def hello(){ invoked hello directly }  def invokeMethod(String name, Object args){    return "unknown method $name(${

2008-12-17 18:08:00 304

翻译 Groovy SQL

本例子说明如何通过Groovy执行SQL先看一下这个例子:piEstimate = 3;println("Pi is about ${piEstimate}");println("Pi is closer to ${22/7}");这个例子显示出,在串中,用${}可以进行表达式计算。这个特性在下面要经常用到。例子1:执行简单查询看下面的3行代码:import groovy.sql.

2008-12-16 17:19:00 902

原创 了解一下gant

 Gant就是用Groovy来实现ant,脚本本身的灵活和优雅,使得Gant比直接用Ant存在很多优势。仅通过一个例子来说明,运行这个例子,需要准备Gant环境,这里不细说了。创建一个文本文件:BuildTest.gant,内容如下://定义两个目录sourceDirectory = sourcebuildDirectory = build//引用一个内置的定义in

2008-12-15 14:41:00 553

原创 Groovy脚本间的调用

 一个Groovy脚本,如果不显示来声明类名,那么默认生成一个和文件名同名的类,并自动生成main函数,脚本中的语句都自动放置在main函数中。见下面例子:创建一个脚本文件:sample.groovy,内容为:println "Hello, world !"println "Args is : " + args 再在同一个目录下创建另一个脚本文件:caller.groovy

2008-12-14 21:56:00 556

原创 MetaClass

Groovy 提供了一个MetaClass,来提供对对象的结构解析。先看一个例子: class Foo { String prop def bar() { "bar" } def bar(String name) { "bar $name" } def add(Integer one, Integer two) { one + two}}//实例化一个类def f = new Fo

2008-12-13 22:04:00 285

原创 自由的属性

 参见如下例子://定义一个类class Expandable { def storage = [:] def getProperty(String name) { storage[name] } void setProperty(String name, value) { storage[name] = value }}//实例化def e = new Expandable()/

2008-12-12 23:05:00 240

原创 再次体会Closure的灵活性

 上一篇文章中,体现了Groovy 对XML生成的灵活性,这种灵活性是怎么实现的呢,通过下面例子可以看出,实现方法很简单。 定义一个类: class XmlBuilder { def out XmlBuilder(out) { this.out = out } def invokeMethod(String name, args) {  out "  //如果参数是Closure,

2008-12-11 12:51:00 238

原创 对模板的支持

 在代码生成技术里,模板是非常有用的工具。Groovy对模板提供非常便利的支持,见如下示例: import java.io.Fileimport groovy.text.Templateimport groovy.text.SimpleTemplateEngine //定义一个Mapdef binding = ["firstname":"Sam", "lastname"

2008-12-10 16:26:00 242

原创 XML操作

 Groovy实现XML文件生成非常直观方便,见下面例子: import groovy.xml.MarkupBuilder//定义一个文件def out = new File(out.xml)def writer = new FileWriter( out )def xml = new MarkupBuilder( writer )def map = ["01":"刘备","0

2008-12-09 22:05:00 224

原创 便利的文件读取

Groovy 提供了文件读取更便利的方式,看下面两个例子:例子一:new File("sample.txt").eachLine { line -> println(line) }上述代码打开一个文件,然后打印每一行 例子二:new File("sample.txt").withReader { reader -> while (true) {  def line = read

2008-12-08 15:28:00 244

原创 生气是守护的力量

 生气是守护的力量,如果你感觉生气,那么说明你感到被侵犯了,而且这个侵犯是来自一个你可以抵抗的主体的,如果这个侵犯是来自一个不能抵抗的主体的,那么,你会感到恐惧。这个观点是最近刚刚学到的,另外学到的一个观点就是,当喜怒哀惧这些情绪出现的时候,不必在内心深处马上给这种情绪打对号或错号,情绪是你自然的存在,尊重其存在,就是尊重你自己。对于生气这种情绪,当它产生时,你首先要做的是接受这个情绪

2008-12-07 22:39:00 248

原创 一个通用对象模型

 (一)设计背景        资源或者数据,其原始形式往往是比较混乱、纷杂的,所以,IT系统的建设,基础行为往往体现为先把资源或数据进行结构化,能够用某种对象模型来表示,然后才方便进行处理。不过,这种对象模型的提取,往往和业务的应用目的紧密联系在一起,不能够剥离出来,往往需要随着应用系统的建设,一遍一遍地来重复构建针对某种资源或数据的分析剥离程序。        例如,一个WEB应用

2008-12-06 22:57:00 350

原创 Groovy 如何通过BSF来调用脚本

这个例子简单说明Groovy中如何使用 BSF来调用脚本 import org.apache.bsf.BSFManager; //定义一个简单的脚本,脚本返回一个数组String myScript = "println(Hello World)/n  return [1, 2, 3]"; //构建BSFManagerBSFManager manager = new

2008-12-05 15:15:00 428

原创 如何调用外部进程

 Groovy 调用外部命令十分方便,看下面的例子://定义命令//注:这里通过cmd/c 来调用,否则Groovy不能应用操作系统的Path系统变量,就只能调用内部命令def command = """cmd /c grails"""//通过字符串的execute方法即可直接运行命令def proc = command.execute()       //输出命令执行

2008-12-03 11:53:00 298

原创 接口方面的支持

 Groovy 对接口方面的支持比Java灵活多了,是否过于灵活了?看下面的示例: //1new Thread( {println "running"} as Runnable ).start(); 这个例子说明,一个“{}”,你想把它做什么接口调用,就可以做什么接口来调用,完全不受名字的限制。 //2 interface X{ void f(); void g(int

2008-12-02 17:59:00 223

原创 逻辑表达式

 Groovy对逻辑表达式的支持也不是一般的简单,看下面的例子: println "apple" ==~ /apple/println "apple" ==~ /apple*/macher = ("a big apple , apple" =~ /appl?/)println macher[0] + "," + macher[1]这里引入了新的运算符: “==~” 来进行逻辑表

2008-12-01 22:47:00 262

原创 数组和列表

 Groovy的语法里为数组和列表进行了非常灵活的支持,请看下面的例子:[1,2,3,4].each{ println it};(1..4).each{ println it};//下面这句 [-1..98] 相当于[99..98],-1代表最后一个索引项,所以最后打印的结果是:100,99(1..100)[-1..98].each{ println it};和Java对比,要

2008-11-30 22:59:00 213

原创 打印 “Hello, World”的4种方式

在Groovy中,字符串处理是非常方便的,有很多种方式可以选择。import groovy.text.Templateimport groovy.text.SimpleTemplateEngine/** 打印 Hello, World**///1{ name -> println "Hello, " + name }.call("World"); //2def f = {print

2008-11-29 23:48:00 704

原创 第一个例子

 这行代码:{parm->println "Hello ${parm}"}.call("World")会输出: Hello World体现了Groovy语法的基本特点,也体现了Groovy和Java语法上的差异。{},在Groovy里,不再是Java里一个用来组合语句的简单括号,而是代表了一个匿名的函数,这个函数还可以有参数。在这个例子中,parm就是一个参数,在函数体中,采用

2008-11-28 23:14:00 255

原创 Groovy,一个非常好的动态语言

 个人认为,Groovy是一门非常好的动态语言。语法和Java兼容,可以认为Java语法是Groovy的子集;简洁、实用的动态语法,功能非常强大;可以编译成为Java Class,具备效率优势;具备众多的子开源项目,发展前景不可限量。已经研究Groovy一段时间了,也积累了一些经验,近期打算在这里写一些东西,搜集整理一些Groovy的资料。

2008-11-27 23:14:00 309

原创 应用系统的品质

一个理想的应用系统具备什么品质:1)  功能完备:应用系统功能完备,是系统的基本要求2)  结构合理:应用系统结构合理,是系统功能可用的保证3)  高效:高效完成事务处理、满足系统效率要求4)  稳定:稳定运行,不会因非系统故障当机5)  高可用:长时间工作、不疲劳6)  安全:系统安全性好,是系统可以实用的一个基本保障7)  可伸缩:系统可以通过简单增加资源,提升系统的总体性能8)  开放:系统

2005-12-08 14:08:00 716

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除