您好,登錄后才能下訂單哦!
Springboot怎樣使用Aspectj實現AOP面向切面編程,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
需在 IOC 容器中將切面聲明為 Bean 實例 即加入@Component 注解;當在 Spring IOC 容器中初始化 AspectJ 切面之后, Spring IOC 容器就會為那些與 AspectJ 切面相匹配的 Bean 創建代理.
在 AspectJ 注解中, 切面只是一個帶有 @Aspect 注解的 Java 類.
網上都是說springboot使用Aspectj做面向切面編程的時候,只需要引入下面jar包依賴即可
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>
但是我去編寫的時候,單單引入 spring-boot-starter-aop 的jar依賴的時候,像@Component、@Aspect等這些註解都不能使用,後來發現缺少aspectjweaver 這么個jar包,最后引入了下面的jar才解決問題
<dependency> <groupId>aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.5.3</version> </dependency>
spring.aop.auto=true這個配置,才能開啟Aspectj注解的掃面,但是我去查詢了springboot全局配置文件,里面默認配置為true(spring.aop.auto=true # Add @EnableAspectJAutoProxy),所以我沒有去做添加,功能沒有問題,切面能正常實現。
1)@Before
: 前置通知:在方法執行之前執行的通知
2)@After
: 后置通知, 在方法執行之后執行 , 即方法返回結果或者拋出異常的時候, 下面的后置通知記錄了方法的終止.
3)@AfterRunning
: 返回通知, 在方法返回結果之后執行
ps:無論方法是正常返回還是拋出異常, 后置通知都會執行. 如果只想在方法返回的時候記錄日志, 應使用返回通知代替后置通知.
4)@AfterThrowing
: 異常通知, 在方法拋出異常之后
5) @Around
: 環繞通知, 圍繞著方法執行(即方法前后都有執行)
環繞通知是所有通知類型中功能最為強大的, 能夠全面地控制連接點. 甚至可以控制是否執行連接點.
/* 標識這個方法是個前置通知, 切點表達式表示執行任意類的任意方法. 第一個 * 代表匹配任意修飾符及任意返回值, 第二個 * 代表任意類的對象, 第三個 * 代表任意方法, 參數列表中的 .. 匹配任意數量的參數 */ //@Before: 前置通知 @Before("execution (* com.lc.project..controller..*.*(..))") public void beforeMethod(JoinPoint joinPoint){ String methodName = joinPoint.getSignature().toString(); Object result= Arrays.asList(joinPoint.getArgs()); System.out.println("The method name:"+methodName+"--value:"+result); } //@After: 后置通知 @After("execution (* *.*(..))") public void afterMethod(JoinPoint joinPoint){ String methodName = joinPoint.getSignature().getName(); System.out.println("The method name:"+methodName+ " ends"); } //@AfterRunning: 返回通知 @AfterReturning(value="execution (* *.*(..))",returning="result") public void afterReturningMethod(JoinPoint joinPoint,Object result){ String methodName = joinPoint.getSignature().getName(); System.out.println("The method name:"+methodName+ " ends and result="+result); } //@AfterThrowing: 異常通知 @AfterThrowing(value="execution (* *.*(..))",throwing="e") public void afterReturningMethod(JoinPoint joinPoint,Exception e){ String methodName = joinPoint.getSignature().getName(); System.out.println("The method name:"+methodName+ " ends and result="+e); }
看完上述內容,你們掌握Springboot怎樣使用Aspectj實現AOP面向切面編程的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。