bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

SpringAOP的介紹和使用方法

這篇文章主要介紹“SpringAOP的介紹和使用方法”,在日常操作中,相信很多人在SpringAOP的介紹和使用方法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”SpringAOP的介紹和使用方法”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

公司主營業務:成都做網站、成都網站設計、移動網站開發等業務。幫助企業客戶真正實現互聯網宣傳,提高企業的競爭能力。創新互聯是一支青春激揚、勤奮敬業、活力青春激揚、勤奮敬業、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰,讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創新互聯推出明山免費做網站回饋大家。

一、AOP介紹

AOP ,面向切面編程,在運行時,動態地將代碼切入到類的指定方法、指定位置上的編程思想就是面向切面的編程。其實就是在代碼運行,進行一定的包裝,如在方法執行前、方法返回后、方法拋出異常后等地方進行一定的攔截處理或者叫增強處理

先講一下AspectJ和Spring AOP關系,網上很多文章對AspectJ存在錯誤說法

AspectJ:

  • AspectJ 來自于 Eclipse 基金會,是Eclipse托管給Apache基金會的一個開源項目

  • 屬于靜態織入,它是通過修改代碼來實現的,它的織入時機可以是:

    • Compile-time weaving:編譯期織入

    • Post-compile weaving:也就是已經生成了 .class 文件,就要用到編譯后織入

    • Load-time weaving:指的是在加載類的時候進行織入

  • AspectJ框架非常強大,它是 AOP 編程的完全解決方案。Spring AOP 致力于解決的是企業級開發中最普遍的 AOP 需求(方法織入)

  • AspectJ 在實際代碼運行前完成了織入,所以大家會說它生成的類是沒有額外運行時開銷的

SpringAOP:

  • 基于動態代理來實現。默認地,如果使用接口的,用 JDK 提供的動態代理實現,如果沒有接口,使用 CGLIB 實現

  • Spring AOP 和AspectJ并沒有什么太多的關系,僅僅是Spring 延用了 AspectJ 中的概念,包括使用了 AspectJ 提供的 jar 包中的注解,但是不依賴于其實現功能

  • Spring AOP 需要依賴于 IOC 容器來管理,只能作用于 Spring 容器中的 Bean,它是使用純粹的 Java 代碼實現的,只能作用于 bean 的方法

  • Spring AOP 比 AspectJ 的性能稍差

二、Spring AOP術語解釋

Joinpoint(連接點)
所謂連接點是指能夠被攔截到的點。在spring中,這些點指的是方法,因為spring只支持方法類型的連接點(任何一個方法都可以稱為連接點)

Pointcut(切入點)
切入點是指我們要對哪些Joinpoint進行攔截的定義(對哪個方法進行增強)

Advice(通知/增強)
通知是指攔截到Joinpoint之后所要做的事情就是通知.通知分為前置通知,后置通知,異常通知,最終通知,環繞通知(切面要完成的功能)(要給它增加什么功能)

Target(目標對象)
代理的目標對象

Weaving(織入)
是指把增強應用到目標對象來創建新的代理對象的過程(怎樣得到代理對象)

Proxy(代理)
一個類被AOP織入增強后,就產生一個結果代理類

Aspect(切面)
是切入點和通知的結合,構成切面,我們可以使用注解或者xml進行配置

三、Spring AOP注解使用

1. 在 xml 中配置
開啟 @AspectJ 的注解,還有其它方式,這里不介紹

<aop:aspectj-autoproxy/>

2. 使用@Aspect注解
定義實現AOP的配置類
@Aspect 注解要作用在 bean 上面

@Component@Aspectpublic class LogAspect {}

3. 配置 Pointcut
用于定義哪些方法需要被增強或者說需要被攔截

    @Pointcut(""execution(* com.ljj.service(..))"")private void controllerAspect() {// TODO Auto-generated method stub}
     @Pointcut("@annotation(com.ljj.annotation.Log)")private void controllerAspect1() {// TODO Auto-generated method stub}@Pointcut(""within(com.ljj.service..*)"")private void controllerAspect2() {// TODO Auto-generated method stub}@Pointcut("bean(*Service)")private void controllerAspect3() {// TODO Auto-generated method stub}
  • execution ,正則匹配方法簽名

  • @annotation。匹配對應注解的方法

  • within,指定所在類或所在包下面的方法

  • bean(idOrNameOfBean), 匹配 bean 的名字

4. 配置 Advice

   @Aspectpublic class AdviceExample {// 下面方法就是寫攔截 "dao層實現"@Before("com.ljj.aop.dataAccessOperation()")public void doAccessCheck() {// ... 實現代碼}@Before("execution(* com.ljj.dao.*.*(..))")public void doAccessCheck() {// ... 實現代碼}@AfterReturning("com.ljj.aop.dataAccessOperation()")public void doAccessCheck() {// ...}@AfterReturning(pointcut="com.ljj.aop.dataAccessOperation()",returning="retVal")public void doAccessCheck(Object retVal) {// 這樣,進來這個方法的處理時候,retVal 就是相應方法的返回值,是不是非常方便// ... 實現代碼}// 異常返回@AfterThrowing("com.ljj.aop.dataAccessOperation()")public void doRecoveryActions() {// ... 實現代碼}@AfterThrowing(pointcut="com.ljj.aop.dataAccessOperation()",throwing="ex")public void doRecoveryActions(DataAccessException ex) {// ... 實現代碼}// 注意理解它和 @AfterReturning 之間的區別,這里會攔截正常返回和異常的情況@After("com.ljj.aop.dataAccessOperation()")public void doReleaseLock() {// 通常就像 finally 塊一樣使用,用來釋放資源。// 無論正常返回還是異常退出,都會被攔截到}// 既能做 @Before 的事情,也可以做 @AfterReturning 的事情@Around("com.ljj.businessService()")public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable {// start stopwatchObject retVal = pjp.proceed();// stop stopwatchreturn retVal;}}

上面Advice都已經匹配了對應的PointCut,這樣定義可以不用再定義PointCut了。也可以使用下面這種PointCut + Advice

//定義日志注解@Target({ ElementType.PARAMETER, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface Log {//操作名String optName();//操作類型OperateType optType();//操作表名String optTable();//操作編碼String optCode();
  }


   @Pointcut("@annotation(com.ljj.annotation.Log)")private void controllerAspect() {// TODO Auto-generated method stub}//日志切面@Around("controllerAspect()")public Object around(ProceedingJoinPoint pjp) throws Throwable {   try {   		//方法執行前操作result = point.proceed();//方法執行后操作} catch (Exception e) {e.printStackTrace();}}

到此,關于“SpringAOP的介紹和使用方法”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注創新互聯網站,小編會繼續努力為大家帶來更多實用的文章!

新聞名稱:SpringAOP的介紹和使用方法
文章來源:http://vcdvsql.cn/article44/pcdsee.html

成都網站建設公司_創新互聯,為您提供ChatGPT電子商務網站收錄面包屑導航企業網站制作小程序開發

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

營銷型網站建設