分类 技术志 下的文章

Hello,AOP

论坛上有人评价Java在过去的2004有两大值得称赞的技术发展,一个是Java在IOC模式上的成熟应用,再就是Java的AOP框架。

一、好消息
2005年一月份传来好消息,AspectJAspectWerkz合力打造AOP框架,两个开发团队将合力开发一个全新的面向方面编程(Aspect-Oriented Programming,AOP)平台,在其中融合双方的长处和经验。这两家都是业界重要的开源AOP实现,不过走了不同的技术路线:AspectJ一直坚持“预编译+源码生成”,AspectWerkz则是“元数据+运行时织入”的代表。关于两种技术路线、两种产品的争论一直是AOP社群的热点话题,如今两个开源组织决定彻底解决这个困扰。两家合并之后的第一个产品将是AspectJ 5,其中既有AspectJ风格的、基于语言扩展的AOP,也有AspectWerkz风格的、基于XML(和JSR-175 annotation)的AOP。随后,双方还会继续融合各自的长处和经验,努力提供一个完善而统一的AOP平台。

下载了AspectJ和AspectWerkz,并分别看了一下各自的FAQ,得到2点结论:
- 现在的AOP技术走势是动态织入;
- AspectWerkz没有添加新的语法之类的东西,它使用的是标准的Java语法,上手简单,而AspectJ则构建一套自己的特殊语法,上手不易。

所以在对AOP进行感性认识的阶段,我更倾向于使用AspectWerkz。

二、Hello AOP!
其实每个人在学习一门新的语言或技术的时候,都会经历一个“成就感驱动的”的学习过程。拿C为例,几乎每个初学者都会在几乎不懂任何C语法的情况下,照猫画虎地写出一个“Hello World”程序来。Why? Because he/she needs this feeling!如果连这样的一个小小的程序都运行不起来或者说出现满屏的错误,初学者的心理就会受到很大影响,也可能这个学习过程会就此结束。OK!作为一个AOP的初学者,我们也来个“Hello AOP”,使用AspectWerkz。

上面已经提到,AspectWerkz使用标准Java语法,只要你学过Java,you have got the passport of the first gate to AOP。

* 搭建AOP环境
 - 下载AspectWerkz包(http://aspectwerkz.codehaus.org/index-aw.html )后解压到一个目录(假设为D:\aw_2_0_2),然后设置环境变量ASPECTWERKZ_HOME=D:\ aw_2_0_2。
 - 设置PATH环境变量
PATH=%ASPECTWERKZ_HOME%\bin
 - 设置CLASSPATH环境变量
CLASSPATH=%ASPECTWERKZ_HOME%\lib\aspectwerkz-2.0.RC2.jar;%ASPECTWERKZ_HOME%\lib\aspectwerkz-jdk14-2.0.RC2.jar;%ASPECTWERKZ_HOME%\lib\dom4j-1.4.jar;%ASPECTWERKZ_HOME%\lib\qdox-1.4.jar;%ASPECTWERKZ_HOME%\lib\concurrent-1.3.1.jar;%ASPECTWERKZ_HOME%\lib\trove-1.0.2.jar;%ASPECTWERKZ_HOME%\lib\jrexx-1.1.1.jar;%CLASSPATH%

* 开始AOP
1)这里我们要在屏幕打印出“Hello AOP!”,看如下代码:
//HelloAOP.java
public class HelloAOP {
    public static void main(String args[]) {
        HelloAOP ha = new HelloAOP();
        ha.test();
    }
    public void test() {
        System.out.println("Hello AOP!");
    }
}
编译HelloAOP.java文件:javac HelloAOP.java

2)现在我要在输出“Hello AOP!”前后做一些工作,这些工作在运行时会得到调用机会,如果使用AOP术语,我们可以说我们要编写我们的aspect,这个aspect会在运行时被weave into (织入)HelloAOP class。

//MyAspect.java
import org.codehaus.aspectwerkz.joinpoint.JoinPoint;
public class MyAspect {
    public void beforeTesting(JoinPoint joinPoint) {
        System.out.println("before testing…");
    }
    public void afterTesting(JoinPoint joinPoint) {
        System.out.println("after testing…");
    }
}
javac MyAspect.java

3)织入过程并不简单,我们需要撰写一个描述文件来将aspect和其织入的class中的信息联系起来。
//aop.xml

   
       
               
               
               
       
   

4)run it
aspectwerkz -Daspectwerkz.definition.file=aop.xml HelloAOP

//output:
before testing…
Hello AOP!
after testing…

Everything is Perfect!

Build ArgoUML and AndroMDA

由于Dominoo近期策略的改变,所以我开始关注和研究UML和MDA领域较为出名的开源项目。我准备先拿ArgoUML和AndroMDA“开刀”。

* ArgoUML
简介:ArgoUML is a modelling tool that helps you do your design using UML and it is the winner of 13th annual productivity award of software development。
主页:http://argouml.tigris.org

* AndroMDA
简介:AndroMDA is an open source MDA framework。
主页:http://www.andromda.org

* 构建(build)方法
In my opinion,常见开源项目构建的两种方法:
Get the source code from cvs and build it in an IDE;
Download the source code package and build it with your patience。
第二个方法显然比较困难,不过这里我将采用之。

* Build ArgoUML

1.前提
 - 下载ArgoUML源码包(ArgoUML-0.16.1-src.zip)及相关库文件(JAR文件);
 - 安装JDK1.4以上版本(不要使用JDK5.0);
 - 安装Ant1.4.1以上版本。

2.目录结构
 - src_new:存放ArgoUML源码文件(src_new是解开源代码包后默认的目录名,如果你要换目录名,请注意修改src_new/build.xml文件中相关名字)
 - lib:存放构建ArgoUML所需的相关JAR文件,包括nsuml.jar, ocl-argo.jar, gef.jar, i18n.jar, antlrall.jar, toolbar.jar,xerces.jar,jmi.jar,log4j.jar。

3.设置环境变量
 - 设置JAVA_HOME环境变量;(一般安装JDK后会自动设置);
 - 设置lib中相关JAR文件的CLASSPATH;

4.修改src_new\build.bat文件
设置ANT_HOME=${Your_Ant_Install_Path};//如ANT_HOME=D:\OpenSource\Ant-1.6.2

5.运行build.bat
在命令行下进入src_new目录,敲入build即可。

6.Build结果
在src_new目录所在的目录下会创建build目录,所有编译生成的.class文件都会放在build\classes中相应的子目录中。

7.小技巧
由于一旦编译出错就会在屏幕上打印出太多的信息,而Windows命令行窗口会自动删除以前过多的输出信息,这样就为我们差错带来不便,建议使用命令管道,如build > build_output.txt,这样build过程所输出的信息就会重定向到build_output.txt文件中,便于我们查找出错之处。

* Build AndroMDA

1.前提
 - 下载AndroMDA源码包(andromad-src-3.0M3.zip);
 - 安装JDK1.4以上版本;
 - 安装Ant;
 - 安装Maven1.0以上版本。

2.目录结构
andromda-src-3.0M3:存放AndroMDA源码文件

3.设置环境变量
 - 设置JAVA_HOME环境变量;(一般安装JDK后会自动设置);
 - 设置ANT_HOME环境变量;ANT_HOME=${Your_Ant_Install_Path};
 - 设置MAVEN_HOME环境变量:MAVEN_HOME=${Your_Maven_Install_Path};
 - 设置Path环境变量:在Path环境变量中加入%MAVEN_HOME%\bin;
 - 设置MAVEN_OPTS环境变量:MAVEN_OPTS=-XX:MaxPermSize=128m -Xmx512m。

4.创建项目的build.properties文件
在andromda-src-3.0M3目录下创建build.properties文件,文件内容如下:
## ———————————————————-
## ${user project home}/build.properties
## ———————————————————-

maven.proxy.host = xx.xx.xx
maven.proxy.port = 8080
maven.proxy.username = xx
maven.proxy.password = xx
maven.repo.remote = http://public.planetmirror.com/pub/maven,
http://mirrors.sunsite.dk/maven/,
http://www.ibiblio.org/maven/
#maven.proxy.username =
#maven.proxy.password =
如果你是通过代理服务器上网,请注意代理服务器的设置。

5.Build
在命令行下进入andromda-src-3.0M3目录,敲入Maven即可。

万里长征终于走出了第一步!看到屏幕上的BUILD SUCCESSFUL,心里还是蛮痛快的^_^。

如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! Go语言第一课 Go语言精进之路1 Go语言精进之路2 Go语言编程指南
商务合作请联系bigwhite.cn AT aliyun.com

欢迎使用邮件订阅我的博客

输入邮箱订阅本站,只要有新文章发布,就会第一时间发送邮件通知你哦!

这里是 Tony Bai的个人Blog,欢迎访问、订阅和留言! 订阅Feed请点击上面图片

如果您觉得这里的文章对您有帮助,请扫描上方二维码进行捐赠 ,加油后的Tony Bai将会为您呈现更多精彩的文章,谢谢!

如果您希望通过微信捐赠,请用微信客户端扫描下方赞赏码:

如果您希望通过比特币或以太币捐赠,可以扫描下方二维码:

比特币:

以太币:

如果您喜欢通过微信浏览本站内容,可以扫描下方二维码,订阅本站官方微信订阅号“iamtonybai”;点击二维码,可直达本人官方微博主页^_^:
本站Powered by Digital Ocean VPS。
选择Digital Ocean VPS主机,即可获得10美元现金充值,可 免费使用两个月哟! 著名主机提供商Linode 10$优惠码:linode10,在 这里注册即可免费获 得。阿里云推荐码: 1WFZ0V立享9折!


View Tony Bai's profile on LinkedIn
DigitalOcean Referral Badge

文章

评论

  • 正在加载...

分类

标签

归档



View My Stats