Aspectj框架實戰(zhàn)案例詳解
本文實例講述了Aspectj框架。分享給大家供大家參考,具體如下:
一 環(huán)境變量配置
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
{
// 定義一個簡單方法,模擬應(yīng)用中的業(yè)務(wù)邏輯方法
public void foo()
{
System.out.println("執(zhí)行Hello組件的foo()方法");
}
// 定義一個addUser()方法,模擬應(yīng)用中的添加用戶的方法
public int addUser(String name , String pass)
{
System.out.println("執(zhí)行Hello組件的addUser添加用戶:" + name);
return 20;
}
}
World.java
package org.crazyit.app.service;
public class World
{
// 定義一個簡單方法,模擬應(yīng)用中的業(yè)務(wù)邏輯方法
public void bar()
{
System.out.println("執(zhí)行World組件的bar()方法");
}
}
2 AOP
AuthAspect.java
package org.crazyit.app.aspect;
public aspect AuthAspect
{
// 指定在執(zhí)行org.crazyit.app.service包中任意類的、任意方法之前執(zhí)行下面代碼塊
// 第一個星號表示返回值不限;第二個星號表示類名不限;
// 第三個星號表示方法名不限;圓括號中..代表任意個數(shù)、類型不限的形參
before(): execution(* org.crazyit.app.service.*.*(..))
{
System.out.println("模擬進行權(quán)限檢查...");
}
}
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
{
// 指定執(zhí)行Hello.sayHello()方法時執(zhí)行下面代碼塊
Object around():call(* org.crazyit.app.service.*.*(..))
{
System.out.println("模擬開啟事務(wù)...");
// 回調(diào)原來的目標方法
Object rvt = proceed();
System.out.println("模擬結(jié)束事務(wù)...");
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
四 編譯后的結(jié)構(gòu)
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
模擬開啟事務(wù)...
模擬進行權(quán)限檢查...
執(zhí)行Hello組件的foo()方法
模擬記錄日志...
模擬結(jié)束事務(wù)...
模擬開啟事務(wù)...
模擬進行權(quán)限檢查...
執(zhí)行Hello組件的addUser添加用戶:孫悟空
模擬記錄日志...
模擬結(jié)束事務(wù)...
模擬開啟事務(wù)...
模擬進行權(quán)限檢查...
執(zhí)行World組件的bar()方法
模擬記錄日志...
模擬結(jié)束事務(wù)...
希望本文所述對大家基于Aspectj框架的java程序設(shè)計有所幫助。
- Android AOP框架AspectJ使用詳解
- java基于AspectJ(面向切面編程)編碼示例分享
- Spring使用AspectJ注解和XML配置實現(xiàn)AOP
- AndroidStudio 配置 AspectJ 環(huán)境實現(xiàn)AOP的方法
- 在Android項目中使用AspectJ的方法
- 分析java 中AspectJ切面執(zhí)行兩次的原因
- Android中使用AspectJ詳解
- AspectJ的基本用法
- Spring Aop之AspectJ注解配置實現(xiàn)日志管理的方法
- 詳解Spring Aop實例之AspectJ注解配置
- 詳解在Spring中如何使用AspectJ來實現(xiàn)AOP
- Spring用AspectJ開發(fā)AOP(基于Annotation)
相關(guān)文章
Slf4j+logback實現(xiàn)JSON格式日志輸出方式
這篇文章主要介紹了Slf4j+logback實現(xiàn)JSON格式日志輸出方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12
基于Java實現(xiàn)計數(shù)排序,桶排序和基數(shù)排序
這篇文章主要為大家詳細介紹了計數(shù)排序,桶排序和基數(shù)排序的多種語言的實現(xiàn)(JavaScript、Python、Go語言、Java),感興趣的小伙伴可以了解一下2022-12-12
java基于ConcurrentHashMap設(shè)計細粒度實現(xiàn)代碼
這篇文章主要介紹了java基于ConcurrentHashMap設(shè)計細粒度實現(xiàn)代碼,通過ConcurrentHashMap實現(xiàn)細粒度,具有一定參考價值,需要的朋友可以了解。2017-10-10
tio-boot整合hotswap-classloader實現(xiàn)熱加載方法實例
這篇文章主要為大家介紹了tio-boot整合hotswap-classloader實現(xiàn)熱加載方法實例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-12-12

