AOP及AspectJ的用法
一、为什么需要AOP技术

二、AOP的功能
- AOP框架在编译阶段,就对目标类进行修改,得到的class文件已经是被修改过的。生成静态的AOP代理类(生成*.class文件已经被改掉了,需要使用特定的编译器)。以AspectJ为代表 —— 静态AOP框架。
- AOP框架在运行阶段,动态生成AOP代理(在内存中动态地生成AOP代理类),以实现对目标对象的增强。它不需要特殊的编译器。以Spring AOP为代表。—— 动态AOP框架。
三、实战AspectJ
1、下载和安装AspectJ
在命令行窗口启动下载得到的jar文件:java -jar aspectj-1.6.10.jar,在弹出的安装界面会先让你选择Java,选择你安装的Java目录 即可。将该软件(绝对绿色)安装到指定目录下(笔者安装在C盘)。
将C:\Java\aspectj1.6\lib\aspectjrt.jar和aspectjtools.jar添加到 CLASSPATH环境变量中。
- bin:该路径下存放了aj、aj5、ajc、ajdoc、ajbrowser等命令,其中ajc命令最常用,它的作用类似于javac,用于对普通Java类进行编译时增强。
- docs:该路径下存放了AspectJ的使用说明、参考手册、API文档等文档。
- lib:该路径下的4个JAR文件是AspectJ的核心类库。
- 相关授权文件。

2、使用AspectJ
package com.mybry.aop.service; public class UserService{ public int addUser(){ System.out.println(“模拟添加用户的方法。”); return 20; } public void validateLogin(){ System.out.println(“验证用户登录。”); } }
BookServce:
package com.mybry.aop.service; public class BookService{ public int addBook(String name,int price){ System.out.println(“正在添加图书,书名是:”+name+”,价格是:”+price); return 100; } }
编译运行结果:

package com.mybry.aop.aspectj; public aspect AuthAspect{ // Advice // execution(* com.mybry.aop.service.*.*(..)执行 任意返回值 改包下的任意类的任意方法形参不限 before():execution(* com.mybry.aop.service.*.*(..)){ // 对原来方法进行修改、增强。 System.out.println(“———-模拟执行权限检查———-”); } }

package com.mybry.aop.aspectj; public aspect TxAspect{ //around的意思就是在方法的前面和后面都加 Object around():execution(* com.mybry.aop.service.*.*(..)){ // 对原来方法进行修改、增强。 System.out.println(“====模拟开启事务====”); Object rvtVal = proceed(); System.out.println(“====模拟结束事务====”); return rvtVal; } }
好了,我们再来编译运行它:

OK!我们的Aspect AOP程序到此为止!