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
二代码
1JavaBean
Hello.java
packageorg.crazyit.app.service; publicclassHello { //定义一个简单方法,模拟应用中的业务逻辑方法 publicvoidfoo() { System.out.println("执行Hello组件的foo()方法"); } //定义一个addUser()方法,模拟应用中的添加用户的方法 publicintaddUser(Stringname,Stringpass) { System.out.println("执行Hello组件的addUser添加用户:"+name); return20; } }
World.java
packageorg.crazyit.app.service; publicclassWorld { //定义一个简单方法,模拟应用中的业务逻辑方法 publicvoidbar() { System.out.println("执行World组件的bar()方法"); } }
2AOP
AuthAspect.java
packageorg.crazyit.app.aspect; publicaspectAuthAspect { //指定在执行org.crazyit.app.service包中任意类的、任意方法之前执行下面代码块 //第一个星号表示返回值不限;第二个星号表示类名不限; //第三个星号表示方法名不限;圆括号中..代表任意个数、类型不限的形参 before():execution(*org.crazyit.app.service.*.*(..)) { System.out.println("模拟进行权限检查..."); } }
LogAspect.java
packageorg.crazyit.app.aspect; publicaspectLogAspect { //定义一个PointCut,其名为logPointcut, //该Pointcut代表了后面给出的切入点表达式,这样可复用该切入点表达式 pointcutlogPointcut() :execution(*org.crazyit.app.service.*.*(..)); after():logPointcut() { System.out.println("模拟记录日志..."); } }
TxAspect.java
packageorg.crazyit.app.aspect; publicaspectTxAspect { //指定执行Hello.sayHello()方法时执行下面代码块 Objectaround():call(*org.crazyit.app.service.*.*(..)) { System.out.println("模拟开启事务..."); //回调原来的目标方法 Objectrvt=proceed(); System.out.println("模拟结束事务..."); returnrvt; } }
3测试类
packagelee; importorg.crazyit.app.service.Hello; importorg.crazyit.app.service.World; publicclassAspectJTest { publicstaticvoidmain(String[]args) { Hellohello=newHello(); hello.foo(); hello.addUser("孙悟空","7788"); Worldworld=newWorld(); 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>javalee.AspectJTest
模拟开启事务...
模拟进行权限检查...
执行Hello组件的foo()方法
模拟记录日志...
模拟结束事务...
模拟开启事务...
模拟进行权限检查...
执行Hello组件的addUser添加用户:孙悟空
模拟记录日志...
模拟结束事务...
模拟开启事务...
模拟进行权限检查...
执行World组件的bar()方法
模拟记录日志...
模拟结束事务...
希望本文所述对大家基于Aspectj框架的java程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。