日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring-AOP @AspectJ进阶之切点复合运算

發布時間:2025/3/21 javascript 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring-AOP @AspectJ进阶之切点复合运算 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 概述
  • 示例

概述

@AspectJ可以使用切點函數定義切點,還可以使用邏輯運算符對切點進行復合運算得到復合切點。

為了在切面中重用切點,還可以對切點進行命名,以便在其他地方引用定義過的切點。

當一個連接點匹配多個切點時,需要考慮織入順序的問題,另外一個重要的問題是如何在增強中訪問連接點上下文的信息。


示例

代碼已托管到Github—> https://github.com/yangshangwei/SpringMaster


這里僅僅展示關鍵代碼

切面部分:

package com.xgj.aop.spring.advisor.aspectJAdvance.pointcutComplex;import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before;/*** * * @ClassName: PointcutComplexAspect* * @Description: 標注了@Aspect的切面* * @author: Mr.Yang* * @date: 2017年9月9日 上午1:50:45*/@Aspect public class PointcutComplexAspect {/*** * * @Title: matchGreetTo* * @Description: 與預算,匹配com.xgj.aop.spring.advisor.aspectJAdvance.* pointcutComplex包中所有greetTo()方法的切點* * * @return: void*/@Before("within(com.xgj.aop.spring.advisor.aspectJAdvance.pointcutComplex.*)"+ " && execution(* greetTo(..))")public void matchGreetTo() {System.out.println("matchGreetTo executed,some logic is here ");}/*** * * @Title: something* * @Description: 非與預算,匹配所有的serverTo方法,且不位于WaiterOne目標類切點* * * @return: void*/@After("!target(com.xgj.aop.spring.advisor.aspectJAdvance.pointcutComplex.WaiterOne)"+ " && execution(* serverTo(..))")public void something() {System.out.println("something executed,some logic is here ");}/*** * * @Title: method* * @Description: 或運算,匹配IWaiter和ISeller接口實現類所有連接點的切點* * * @return: void*/@AfterReturning("target(com.xgj.aop.spring.advisor.aspectJAdvance.pointcutComplex.IWaiter)"+ " || target(com.xgj.aop.spring.advisor.aspectJAdvance.pointcutComplex.ISeller)")public void method() {System.out.println("method executed,some logic is here ");}}

配置文件,Bean的初始化使用context:component-scan掃描

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><!-- (1)聲明Context命名空間以及Schema文件 (2)掃描類包以及應用注解定義的bean --> <context:component-scan base-package="com.xgj.aop.spring.advisor.aspectJAdvance.pointcutComplex"/><!-- 基于@AspectJ切面的驅動器 --> <aop:aspectj-autoproxy proxy-target-class="true"/><!-- 使用了@AspectJ注解的切面類 --> <bean class="com.xgj.aop.spring.advisor.aspectJAdvance.pointcutComplex.PointcutComplexAspect"/></beans>

測試類:

package com.xgj.aop.spring.advisor.aspectJAdvance.pointcutComplex;import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;public class PointcutComplexAspectTest {@Testpublic void test() {ApplicationContext ctx = new ClassPathXmlApplicationContext("com/xgj/aop/spring/advisor/aspectJAdvance/pointcutComplex/conf-pointcutComplex.xml");WaiterOne waiterOne = ctx.getBean("waiterOne", WaiterOne.class);WaiterTwo waiterTwo = ctx.getBean("waiterTwo", WaiterTwo.class);SellerOne sellerOne = ctx.getBean("sellerOne", SellerOne.class);SellerTwo sellerTwo = ctx.getBean("sellerTwo", SellerTwo.class);waiterOne.greetTo("XiaoGongJiang");System.out.println();waiterOne.serverTo("XiaoGongJiang");System.out.println();waiterTwo.greetTo("XiaoGongJiang");System.out.println();sellerOne.greetTo("XiaoGongJiang");System.out.println();sellerOne.greetTo("XiaoGongJiang");System.out.println();} } 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的Spring-AOP @AspectJ进阶之切点复合运算的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。