- 浏览: 17858 次
- 性别:
- 来自: 杭州
最新评论
-
叶落黄昏:
在1.7.5版本中尝试了一下,确实可以运行,这篇文章是从以前的 ...
Groovy基础与实践——与Java的基本不同点 -
JohnnyJian:
Groovy中的循环早就可以像Java那样写了
Groovy基础与实践——与Java的基本不同点
文章列表
很多时候,我们会使用java的hashCode在一定范围内区别对象。但是我们对java的hashCode生成规则了解多少?翻看JDK源码就可以看到我们常用的数据结构,如HashMap,ArrayList,String,Integer等类型HashCode的实现方式。
Java中的所有类的基类Object类中定义并实现了方法hashCode(),在Object类中该方法被定义成为native方法,由虚拟机的实现部分提供实现(并且注释中提到在TM版JAVA编程语言是不需要实现的),该方法返回当前对象内存地址的整数值。当我们在定义一个类型的时候,没有重载hashCode方法的情况下,我们自定类对象的 ...
在JAVA中,String的操作总是同其它对象一下,任何操作都是要一丝不苟地进行方法调用,Groovy在语法特性上加入了对String的便捷支持。为了更好的扩展String类(Java中是final型),Groovy定义了GString作为String的支持。具体来看,Groovy带给String的灵活特性:
在CSS中使得一个具体的元素获得一个样式定义属性集合,有以下几种方式:
1、直接在元素中通过style来定义标签样式(许多JS是通过这种方式来动态控制元素的样式)
比如有以下代码
<div tyle="background:black">
</div>
通过style方式来定义了div标签的样式,这种方式定义样式在css规范中有很高的优先权(1000)
2.通过ID选择器来获取样式定义,有以下代码:
<div id="bgc">
</div>
然后我们定义了ID选择器的:
#bgc{b ...
1、逻辑运算符 == ,在java中运算符 == 是用作对比两个对象的标识是否一样,或者对于基本类型而言数据值是否相等。基本类型和对象数据之间是不可以用直接意义上的比较,java中采用的是将对象类型拆箱,而在groovy中,由于自动装箱的功能,一切都是对象。要使得 == 比较有通用性的意义,groovy通过equals()来重载 == 预算符。
2、 在groovy中以下包都是默认引用的,在groovy代码中无需手动引用
* java.io.*
* java.lang.*
* java.math.BigDecimal
* java.math.BigInt ...
多线程并发处理起来通常比较麻烦,如果你使用spring容器来管理业务bean,事情就好办了多了。spring封装了java的多线程的实现,你只需要关注于并发事物的流程以及一些并发负载量等特性。具体来说如何使用spring来处理并发事务:
首先编写具体的事务逻辑,实现Runnable接口,比如说
package
com.andy.threadDemo; public
class
ThreadTransCode
implements
Runnable{
@Override
public
void
run ...
很好奇GROOVY是如何在JAVA语言的基础上平添了如此之多的强大功能和语言特性。翻看了一些GROOVY的源代码。语言的特性,离不开语言底层模
型的支持,在构建好自己的语言模型之后,接下来需要的就是形式化的东西,也就是语法,遵循语法编写代码,以用编译器构建出既定的语言模型体系下的字节码,
然后再JVM机上无差别于JAVA代码一样运行,我理解的Groovy就是这样。
GROOVY可以作为脚本来运行,即Script对象,也可以作为类似JAVA的Class来运行,不管是以Script方式运行还是说作为Class
方式。Groovy编译之后的类 ...
如
果有脚本作为业务逻辑来运作,有大批量的脚本,每个脚本对应一个独立的业务功能点,比如支持一面上某一功能的展示。有这样的应用场景,将Groovy脚本
作为Velocity背后的逻辑语言支持。每个Groovy脚本负责页面上一个功能点的数据准备。然而在一个又有数十个上百个WEB应用系统协作运行的大
型分布式WEB应用系统,很多时候,我们需要在不同的应用的不用页面上展示某些相同的功能,然后又有更为疯狂的想法,为了让一个这些应用系统能够使用共享
这些代码,而不至于各个系统中重复书写相同的代码,我们将这些逻辑代码用Groovy+Velocity实现,用数据库存放,各个系统从数据库中读取到代
码后 ...
Groovy本身是可以作为脚本以松散的代码方式执行的。前面的文章中已经说过了groovy脚本的代码组织方式。本文主要是谈谈Groovy脚本中关于方式调用,脚本相关属性访问的问题。
我们编写松散的Groovy代码,实际上就是在实现Groovy脚本对象Script的run方法。当然我们可以定义方法,当我们引用一个方法的时
候,首先是从对应的MetaClass中去寻找对应的方法,如果找不到便从自己的Binding对象中去寻找同名的闭包,如果能够找到同名闭包,运行该闭
包,如果过找不到这时才会抛出找不到方法的异常。
groovy脚本中的属性访问相对于方法调用来说,顺序似乎是反过来的,当我 ...
MetaClassRegistry 维护着class和meta=class之间的对应关系。那么这个映射表中键值对又是在什么时候添加的喃?
有两种情况,比如我们的代码中主动地设置,比如我们使用了ExpandoMetaClass来扩展java类,另外一种情况是就是Groovy本身的Class是何时与其MetaClass挂钩的?
之前有猜想过,这种映射关系是在加载了groovy的Class之后,也就是装载了groovy源文件分析出class之后便创建了其对应的
metaclass的映射。但是我翻了Groovy
源码没有发现在加载class的时候进行metaclass设置。有一段时 ...
由于公司项目的需要,最经在研究Quercus一个纯java的php引擎。项目这两个需要做的就是将该引擎裁剪,做一个相对安全的版本,提供给ISV使用,同时,在引擎中提供默认的接口供调用。所以先研究了一下,在Quercus引擎的支持下,PHP如何与java集成。
以下是学习到的几点:
1、如果使用 Resin-IoC/WebBeans来组织应用的服务到脚本中,那么脚本中就可以直接获取到配置的服务的单例实例的引用,使用方式如下
<?php
$demo_manager = java_bean("DemoeManager");
$demo = $demo_man ...
Spring本身不提供任务调度的直接实现,但是Spring在自身框架原则前提下提供了对Timer和Quartz的集成。使用spring容器可以轻松地对既有的bean进行任务调度。
在说明如何在spring中使用任务调度之前,首先来看看Timer本身。
JDK中提供的Timer是比Quartz更为简单的调度方法,当然,Quartz提供了更为强大的功能。相比Timer,Quartz独有的特性包括:
1、支持持久性作业。Quartz允许将作业状态持久化,在应用服务器重启之间,也能够保持一致的作业状态。
2、类Cron的定时支持。通过Quartz的CronTrigger,Quar ...
Groovy的动态特性允许对象和类都能够在运行期动态地添加方法和属性,在复杂的应用场景,我们很难判断一个具体的对象是否有某个方法。
也有这么一个应用场景,是我所经历到的,Groovy脚本代码被不同的java应用系统加载,脚本依赖于各个应用系统提供的java环境运行,这个环境
包括当前应用的classpath中有哪些jar包,jar包版本等等,以及由具体应用系统通过bingding对象向脚本中注入的一系列的作为技术服务的bean,
比如获取数据的接口bean。有时候我们各个性用系统的这些环境不一致,导致运行同一个Groovy脚本出现错误,很多由于jar包版本的原因,出现找不 ...