学习AspectJ框架(一):AspectJ开发环境搭建与Hello World
来源:互联网 发布:下载农村淘宝免费下载 编辑:程序博客网 时间:2024/06/18 05:55
AOP大家都不陌生,它是一种编程理念,一种规范,有很多的实现者如Spring AOP,JBoss AOP,还有我们今天要讲的AspectJ。我们平时项目用到最多的是Spring AOP,它是用纯Java实现的,不需要专门的编译过程,不需要特殊的类加载器,它在运行期通过JDK动态代理或者Cglib动态代理的方式向目标类织入增强代码。而AspectJ是语言级的AOP实现,它定义了自己的AOP语法和专门的编译期用来生成符合java字节码规范的class文件。
我们平时开发用的都是Eclipse,现在我们看下如何在Eclipse开发Aspectj代码。首先必须安装插件:AJDT,可以从这里挑选适合所有Eclipse版本的插件。比如我用的是4.4版本的eclipse:那我就选择AJDT 2.2.4版本的插件。
解压后的结果如下:像安装其他Eclipse插件一样,将features和plugins下面的内容复制到Eclipse对应目录下,之后重启eclipse即可。
因为我们AJDT插件已经安装成功,所以我们可以创建一个aspectj工程(跟普通的java工程没有什么区别)。
编写普通的Main.java和MyService.java,代码如下:
package net.aty.aspectj;public class Main {public static void main(String[] args) {System.out.println("main begin...");MyService service = new MyService();service.sayHello();System.out.println("main end...");}}
package net.aty.aspectj;public class MyService {public void sayHello() {System.out.println("Hello World.");}}
这跟建立一个java文件也是类似的,只不过差别在于java文件能被eclipse编译,而aspecj文件eclipse默认不认识。由于安装了AJDT插件,所以eclipse也能够编译aspect文件。HelloAspect.aj源码如下:
package net.aty.aspectj;public aspect HelloAspect {pointcut HelloWorldPointCut() : execution(* net.aty.aspectj.MyService.*(..));before() : HelloWorldPointCut(){System.out.println("begin intercept");}after() : HelloWorldPointCut(){System.out.println("end intercept");}}
在eclipse中运行Main.java执行结果如下:可以看到成功地对目标类进行了增强。
我们的aspectj工程如下:这跟正常的java工程差别不大。
使用AJDT插件能够极大地方便我们开发,让aspectj工程和.aj文件与普通的java工程和.java文件一致。代码还是上面的代码,现在我们看下如何在命令行自己编译.aj文件和运行,这跟在命令行使用javac和java命令很类似。为了使用javac和java,我们必须安装JRE(或JDK),同样地我们也需要安装Aspectj开发工具包。可以从这里下载。
下载完成后运行aspectj-1.8.8.jar,就可以进行安装页面了。之后指定JRE位置下一步即可安装成功,很容易。
最终安装成功后的结果如下:bin目录下提供了一些命令能够让我们自己编译.aj文件。
项目结构如下:
javac文件夹:存放使用javac命令编译得到的class文件
aspectj文件夹:存放使用ajc命令编译得到的class文件
use_aspectj_compile.bat:使用ajc将java文件和aj文件编译到aspectj文件夹
use_javac_compile.bat:使用javac命令将java文件(javac命令是不认识aj文件的)编译到javac文件夹
run.bat:调用use_aspectj_compile.bat和use_javac_compile.bat,并执行编译后得到的class文件。
注意:这3个bat文件是必需的,javac和aspectj文件夹会自动创建。
use_javac_compile.bat内容如下:
@echo offrem get the directory of current bat file.set "CURRENT_DIR=%cd%"echo current directory is: %CURRENT_DIR%rem remove exist temp file.set "srclist=srclist.txt"if exist %srclist% (del %srclist%)rem show all .java filesecho all java files are: for /R %CURRENT_DIR%/src %%s in (*.java) do ( echo %%s echo %%s >> %srclist%) set "class_dir=javac"if exist %class_dir% (rd /s/q %class_dir% )mkdir %class_dir% rem use javac to compile all java files.javac -d %class_dir% @%srclist%
@echo offset "CURRENT_DIR=%cd%"echo current directory is: %CURRENT_DIR%rem remove exist temp file.set "srclist=srclist.txt"if exist %srclist% (del %srclist%)echo all java files are: for /R %CURRENT_DIR%/src %%s in (*.java *.aj) do ( echo %%s echo %%s >> %srclist%) set "class_dir=aspectj"if exist %class_dir% (rd /s/q %class_dir%)mkdir %class_dir%rem use javac to compile all java files.ajc -d %class_dir% -classpath C:/aspectj1.8/lib/aspectjrt.jar @%srclist%
@echo offecho use aspectj to compile...call use_aspectj_compile.batecho use aspectj compile success...echo=echo use javac to compile...call use_javac_compile.batecho use javac compile success...echo=echo run classes(use javac to compile)...java -classpath javac net.aty.aspectj.Mainecho=echo run classes(use aspectj to compile)...java -classpath aspectj;"C:/aspectj1.8/lib/aspectjrt.jar" net.aty.aspectj.Main
使用aspectj的ajc命令会编译出:HelloAspect.class和MyService.class,我们可以使用反编译工具jd-gui查看代码。可以看出MyService被增强了。
- 学习AspectJ框架(一):AspectJ开发环境搭建与Hello World
- 如何搭建AOP(aspectJ)的开发环境.
- Android 开发环境搭建与Hello World
- aop aspectj [intellij idea配置] [hello world]
- 基于Spring环境的AspectJ开发环境搭建
- 跟我学aspectj之二 ----- 搭建开发环境
- 使用IntelliJ IEDA开发AspectJ项目——环境搭建
- MonoDroid学习笔记(一)—— 搭建MonoDroid开发环境及Hello World
- MonoDroid学习笔记(一)—— 搭建MonoDroid开发环境及Hello World
- MonoDroid学习笔记(一)—— 搭建MonoDroid开发环境及Hello World
- MonoDroid学习笔记(一)—— 搭建MonoDroid开发环境及Hello World
- 安卓开发入门(一):环境搭建,“Hello, World”
- React Native(一):搭建开发环境、出Hello World
- android学习_0001_环境搭建与hello world
- Python学习-安装、环境搭建与Hello World
- Flutter学习之旅----环境搭建与Hello World
- AspectJ 开发环境指南 ——AspectJ Browser
- AspectJ 开发
- 【代码笔记】iOS-仿QQ空间,歌曲播放
- HDU 3452 最小割 (树形dp)
- Junit单元测试框架详解
- 新手在服务器上用IIS部署网站(建站)教程
- 深入理解C语言中的指针与数组之指针篇
- 学习AspectJ框架(一):AspectJ开发环境搭建与Hello World
- push xib 建的controller
- ViewPager1
- CUDA内存类型
- PCI驱动程序实现
- 调用系统组件
- 《ASP.NET5》无法路由到Web API Controller控制器
- JSP指令、JSP九大隐式对象、out隐式对象详细
- 对ByteArrayInputStreamh和ByteArrayOutputStream的理解及使用