Aspectj框架實(shí)戰(zhàn)案例詳解
本文實(shí)例講述了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
{
// 定義一個(gè)簡單方法,模擬應(yīng)用中的業(yè)務(wù)邏輯方法
public void foo()
{
System.out.println("執(zhí)行Hello組件的foo()方法");
}
// 定義一個(gè)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
{
// 定義一個(gè)簡單方法,模擬應(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í)行下面代碼塊
// 第一個(gè)星號表示返回值不限;第二個(gè)星號表示類名不限;
// 第三個(gè)星號表示方法名不限;圓括號中..代表任意個(gè)數(shù)、類型不限的形參
before(): execution(* org.crazyit.app.service.*.*(..))
{
System.out.println("模擬進(jìn)行權(quán)限檢查...");
}
}
LogAspect.java
package org.crazyit.app.aspect;
public aspect LogAspect
{
// 定義一個(gè)PointCut,其名為logPointcut,
// 該P(yáng)ointcut代表了后面給出的切入點(diǎn)表達(dá)式,這樣可復(fù)用該切入點(diǎn)表達(dá)式
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()方法時(shí)執(zhí)行下面代碼塊
Object around():call(* org.crazyit.app.service.*.*(..))
{
System.out.println("模擬開啟事務(wù)...");
// 回調(diào)原來的目標(biā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
五 運(yùn)行
G:\test\AspectJQs>java lee.AspectJTest
模擬開啟事務(wù)...
模擬進(jìn)行權(quán)限檢查...
執(zhí)行Hello組件的foo()方法
模擬記錄日志...
模擬結(jié)束事務(wù)...
模擬開啟事務(wù)...
模擬進(jìn)行權(quán)限檢查...
執(zhí)行Hello組件的addUser添加用戶:孫悟空
模擬記錄日志...
模擬結(jié)束事務(wù)...
模擬開啟事務(wù)...
模擬進(jìn)行權(quán)限檢查...
執(zhí)行World組件的bar()方法
模擬記錄日志...
模擬結(jié)束事務(wù)...
希望本文所述對大家基于Aspectj框架的java程序設(shè)計(jì)有所幫助。
- Android AOP框架AspectJ使用詳解
- java基于AspectJ(面向切面編程)編碼示例分享
- Spring使用AspectJ注解和XML配置實(shí)現(xiàn)AOP
- AndroidStudio 配置 AspectJ 環(huán)境實(shí)現(xiàn)AOP的方法
- 在Android項(xiàng)目中使用AspectJ的方法
- 分析java 中AspectJ切面執(zhí)行兩次的原因
- Android中使用AspectJ詳解
- AspectJ的基本用法
- Spring Aop之AspectJ注解配置實(shí)現(xiàn)日志管理的方法
- 詳解Spring Aop實(shí)例之AspectJ注解配置
- 詳解在Spring中如何使用AspectJ來實(shí)現(xiàn)AOP
- Spring用AspectJ開發(fā)AOP(基于Annotation)
相關(guān)文章
springboot集成Deepseek4j的項(xiàng)目實(shí)踐
本文主要介紹了springboot集成Deepseek4j的項(xiàng)目實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-03-03
Slf4j+logback實(shí)現(xiàn)JSON格式日志輸出方式
這篇文章主要介紹了Slf4j+logback實(shí)現(xiàn)JSON格式日志輸出方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
基于Java實(shí)現(xiàn)計(jì)數(shù)排序,桶排序和基數(shù)排序
這篇文章主要為大家詳細(xì)介紹了計(jì)數(shù)排序,桶排序和基數(shù)排序的多種語言的實(shí)現(xiàn)(JavaScript、Python、Go語言、Java),感興趣的小伙伴可以了解一下2022-12-12
java基于ConcurrentHashMap設(shè)計(jì)細(xì)粒度實(shí)現(xiàn)代碼
這篇文章主要介紹了java基于ConcurrentHashMap設(shè)計(jì)細(xì)粒度實(shí)現(xiàn)代碼,通過ConcurrentHashMap實(shí)現(xiàn)細(xì)粒度,具有一定參考價(jià)值,需要的朋友可以了解。2017-10-10
tio-boot整合hotswap-classloader實(shí)現(xiàn)熱加載方法實(shí)例
這篇文章主要為大家介紹了tio-boot整合hotswap-classloader實(shí)現(xiàn)熱加載方法實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12
jenkins按模塊進(jìn)行構(gòu)建遇到的問題及解決方案
這篇文章主要介紹了jenkins按模塊進(jìn)行構(gòu)建的問題及解決方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05

