本文实例讲述了Aspectj框架。分享给大家供大家参考,具体如下:
一 环境变量配置
CLASSPATH配置为:
.;d:\\aspectj1.8\\lib\\aspectjrt.jar;D:\\Program\\Java\\jdk1.8.0_162\\lib\\dt.jar;D:\\Program\\Java\\jdk1.8.0_162\\lib\\tools.jar;
path要配置为:
d:\\aspectj1.8\\bin
二 代码
1 JavaBean
Hello.java
package org.crazyit.app.service;public class Hello{// 定义一个简单方法,模拟应用中的业务逻辑方法public void foo(){System.out.println(\"执行Hello组件的foo()方法\");}// 定义一个addUser()方法,模拟应用中的添加用户的方法public int addUser(String name , String pass){System.out.println(\"执行Hello组件的addUser添加用户:\" + name);return 20;}}
World.java
package org.crazyit.app.service;public class World{// 定义一个简单方法,模拟应用中的业务逻辑方法public void bar(){System.out.println(\"执行World组件的bar()方法\");}}
2 AOP
AuthAspect.java
package org.crazyit.app.aspect;public aspect AuthAspect{// 指定在执行org.crazyit.app.service包中任意类的、任意方法之前执行下面代码块// 第一个星号表示返回值不限;第二个星号表示类名不限;// 第三个星号表示方法名不限;圆括号中..代表任意个数、类型不限的形参before(): execution(* org.crazyit.app.service.*.*(..)){System.out.println(\"模拟进行权限检查...\");}}
LogAspect.java
package org.crazyit.app.aspect;public aspect LogAspect{// 定义一个PointCut,其名为logPointcut,// 该Pointcut代表了后面给出的切入点表达式,这样可复用该切入点表达式pointcut logPointcut():execution(* org.crazyit.app.service.*.*(..));after():logPointcut(){System.out.println(\"模拟记录日志...\");}}
TxAspect.java
package org.crazyit.app.aspect;public aspect TxAspect{// 指定执行Hello.sayHello()方法时执行下面代码块Object around():call(* org.crazyit.app.service.*.*(..)){System.out.println(\"模拟开启事务...\");// 回调原来的目标方法Object rvt = proceed();System.out.println(\"模拟结束事务...\");return rvt;}}
3 测试类
package lee;import org.crazyit.app.service.Hello;import org.crazyit.app.service.World;public class AspectJTest{public static void main(String[] args){Hello hello = new Hello();hello.foo();hello.addUser(\"孙悟空\" , \"7788\");World world = new World();world.bar();}}
三 编译
G:\\test\\AspectJQs>ajc -d . *.java
四 编译后的结构
G:\\test\\AspectJQs>tree /f
卷 VirtualOS 的文件夹 PATH 列表
卷序列号为 8600-758F
G:.
│ AspectJTest.java
│ AuthAspect.java
│ Hello.java
│ LogAspect.java
│ TxAspect.java
│ World.java
│
├─lee
│ AspectJTest.class
│
└─org
└─crazyit
└─app
├─aspect
│ AuthAspect.class
│ LogAspect.class
│ TxAspect.class
│
└─service
Hello.class
World.class
五 运行
G:\\test\\AspectJQs>java lee.AspectJTest
模拟开启事务…
模拟进行权限检查…
执行Hello组件的foo()方法
模拟记录日志…
模拟结束事务…
模拟开启事务…
模拟进行权限检查…
执行Hello组件的addUser添加用户:孙悟空
模拟记录日志…
模拟结束事务…
模拟开启事务…
模拟进行权限检查…
执行World组件的bar()方法
模拟记录日志…
模拟结束事务…
希望本文所述对大家基于Aspectj框架的java程序设计有所帮助。
您可能感兴趣的文章:
- Android AOP框架AspectJ使用详解
- java基于AspectJ(面向切面编程)编码示例分享
- Spring使用AspectJ注解和XML配置实现AOP
- AndroidStudio 配置 AspectJ 环境实现AOP的方法
- 在Android项目中使用AspectJ的方法
- 分析java 中AspectJ切面执行两次的原因
- Android中使用AspectJ详解
- AspectJ的基本用法
- Spring Aop之AspectJ注解配置实现日志管理的方法
- 详解Spring Aop实例之AspectJ注解配置
- 详解在Spring中如何使用AspectJ来实现AOP
- Spring用AspectJ开发AOP(基于Annotation)