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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

AOP:【动态代理】||@Pointcut

發布時間:2025/4/16 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 AOP:【动态代理】||@Pointcut 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

AOP:【動態代理】 * 指在程序運行期間動態的將某段代碼切入到指定方法指定位置進行運行的編程方式

* 1、導入aop模塊;Spring AOP:(spring-aspects)

<dependency>
?? <groupId>org.springframework</groupId>
?? <artifactId>spring-aspects</artifactId>
?? <version>4.3.12.RELEASE</version>
</dependency>

* 2、定義一個業務邏輯類(MathCalculator);在業務邏輯運行的時候將日志進行打印(方法之前、方法運行結束、方法出現異常,xxx)
* 3、定義一個日志切面類(LogAspects):切面類里面的方法需要動態感知MathCalculator.div運行到哪里然后執行;
*???? 通知方法
*??????? 前置通知(@Before):logStart:在目標方法(div)運行之前運行
*??????? 后置通知(@After):logEnd:在目標方法(div)運行結束之后運行(無論方法正常結束還是異常結束)
*??????? 返回通知(@AfterReturning):logReturn:在目標方法(div)正常返回之后運行
*??????? 異常通知(@AfterThrowing):logException:在目標方法(div)出現異常以后運行
*??????? 環繞通知(@Around):動態代理,手動推進目標方法運行(joinPoint.proceed()
* 4、給切面類的目標方法標注何時何地運行(通知注解)
* 5、將切面類和業務邏輯類(目標方法所在類)都加入到容器中;
* 6、必須告訴Spring哪個類是切面類(給切面類上加一個注解:@Aspect?)
* 7、給配置類中加 @EnableAspectJAutoProxy 【開啟基于注解的aop模式】
*???? 在Spring中很多的 @EnableXXX;

* 三步: * 1)、將業務邏輯組件和切面類都加入到容器中;告訴Spring哪個是切面類(@Aspect) * 2)、在切面類上的每一個通知方法上標注通知注解,告訴Spring何時何地運行(切入點表達式) * 3)、開啟基于注解的aop模式;@EnableAspectJAutoProxy

MathCalculator.java

package com.dym.aop;public class MathCalculator {public int div(int i,int j){System.out.println("MathCalculator...div...");return i/j; }}

LogAspects.java

package com.dym.aop;import java.util.Arrays;import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.AfterThrowing; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut;/*** @Aspect: 告訴Spring當前類是一個切面類*/ @Aspect public class LogAspects {//抽取公共的切入點表達式//1、本類引用//2、其他的切面引用@Pointcut("execution(public int com.dym.aop.MathCalculator.*(..))")public void pointCut() {};//@Before在目標方法之前切入;切入點表達式(指定在哪個方法切入)@Before("pointCut()")public void logStart(JoinPoint joinPoint) {Object[] args = joinPoint.getArgs();System.out.println("" + joinPoint.getSignature().getName() + "運行。。。@Before:參數列表是:{" + Arrays.asList(args) + "}");}@After("com.dym.aop.LogAspects.pointCut()")public void logEnd(JoinPoint joinPoint) {System.out.println("" + joinPoint.getSignature().getName() + "結束。。。@After");}//JoinPoint一定要出現在參數表的第一位@AfterReturning(value = "pointCut()", returning = "result")public void logReturn(JoinPoint joinPoint, Object result) {System.out.println("" + joinPoint.getSignature().getName() + "正常返回。。。@AfterReturning:運行結果:{" + result + "}");}@AfterThrowing(value = "pointCut()", throwing = "exception")public void logException(JoinPoint joinPoint, Exception exception) {System.out.println("" + joinPoint.getSignature().getName() + "異常。。。異常信息:{" + exception + "}");}}

MainConfigOfAOP.java

package com.dym.config;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.EnableAspectJAutoProxy;import com.dym.aop.LogAspects; import com.dym.aop.MathCalculator;@EnableAspectJAutoProxy @Configuration public class MainConfigOfAOP {//業務邏輯類加入容器中@Beanpublic MathCalculator calculator(){return new MathCalculator();}//切面類加入到容器中@Beanpublic LogAspects logAspects(){return new LogAspects();} }

IOCTest_AOP.java

package com.dym.test;import org.junit.Test; import org.springframework.context.annotation.AnnotationConfigApplicationContext;import com.dym.aop.MathCalculator; import com.dym.config.MainConfigOfAOP;public class IOCTest_AOP {@Testpublic void test01(){AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfigOfAOP.class);//1、不要自己創建對象 // MathCalculator mathCalculator = new MathCalculator(); // mathCalculator.div(1, 1);MathCalculator mathCalculator = applicationContext.getBean(MathCalculator.class);mathCalculator.div(1, 1);applicationContext.close();}}

???????

總結

以上是生活随笔為你收集整理的AOP:【动态代理】||@Pointcut的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 欧美日韩一区二区三区69堂 | 99热这里只有精品7 青青草社区 | 狠狠操网站 | 香蕉久久夜色精品国产使用方法 | 99热在线只有精品 | 亚洲精品乱码久久久久久自慰 | 亚洲精品国产熟女久久久 | 国产一区亚洲二区 | 嫩草研究院在线观看 | 麻豆视频在线观看 | 91黄版| 欧美二区在线观看 | 欧美 日韩 视频 | 中文在线一区二区 | 狠狠狠狠狠狠狠 | 天堂中文资源在线观看 | 999热精品| 中文字幕精品在线 | 99国产精品免费视频 | 国产999精品 | 精品人妻一区二区三区蜜桃 | 四虎av影院 | 黄瓜污视频 | 中文字幕在线播放一区二区 | www黄色网 | 日韩欧美亚洲精品 | 91麻豆国产福利精品 | 在线观看少妇 | 雨宫琴音一区二区三区 | 欧美电影一区二区三区 | 日本视频一区二区 | 日本3级网站 | 在线免费观看污片 | 久久日韩精品 | 国产第六页 | 日韩激情电影在线 | 日本中文字幕一区 | 色眯眯影院 | 色一情一伦一子一伦一区 | 白石茉莉奈中文字幕在 | gai视频在线观看资源 | 手机成人在线 | 亚洲一区二区色图 | 禁果av一区二区三区 | 四虎精品在永久在线观看 | 在线小视频你懂的 | 一区二区三区视频免费在线观看 | 国产欧美一区二区三区在线老狼 | 日韩精品欧美激情 | 精品日韩制服无码久久久久久 | 黑人巨大国产9丨视频 | 日韩久久av | 精品黄色av | 我爱avav色aⅴ爱avav | av无码精品一区二区三区宅噜噜 | 长篇h版少妇沉沦交换 | 国产又粗又猛又爽又黄av | 成年人福利网站 | 波多野结衣国产 | 国产在线观看xxx | 国产一级一片免费播放 | 熟妇人妻系列aⅴ无码专区友真希 | 漂亮人妻洗澡被公强 日日躁 | 干综合网 | 亚洲色图插插插 | 黑人乱码一区二区三区av | 欧美一区二区三区日韩 | 国产人妖ts重口系列网站观看 | 欧美极品一区二区 | 欧美壮男野外gaytube | 久久精品国产亚洲av嫖农村妇女 | 黄色av高清| 日本福利一区二区 | www.av在线播放 | 免费在线观看网址 | 日韩精选av| 欧美操女人 | 少妇高潮大叫好爽喷水 | 欧美中文日韩 | 粗喘呻吟撞击猛烈疯狂 | 一进一出好爽视频 | 精品国产乱码久久久久久久软件 | 亚洲精品电影 | 成人一二三区 | 日本裸体动漫 | 玖玖在线资源 | 黄页网站视频在线观看 | 国产深喉视频一区二区 | 哪个网站可以看毛片 | 狠狠操伊人| 91九色蝌蚪91por成人 | 青苹果av| 91看大片| 97伦伦午夜电影理伦片 | 天天射夜夜 | 日韩美女性生活 | 色婷婷五 | 女人18岁毛片| 国产伦精品一区二区三区视频网站 |