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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。