AI智能
改变未来

Aspectj框架实战案例详解

本文实例讲述了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)
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » Aspectj框架实战案例详解