Spring框架 -- AOP程式設計
一.Aop概述
Aspect Object Programming 面向切面程式設計,採取橫向抽取機制,取代的傳統的縱向繼承體系重複性程式碼
連線點(Join point)
- 類裡面哪些方法可以被增強,這些方法稱為連線點|
切入點(Pointcut)
- 在類中可以被增強的方法有很多,但是當你實際操作時實現了方法增強的方法稱為切入點
通知/增強(Advice)
-
增強擴充套件功能的邏輯,稱謂增強。例如擴充套件日誌功能,這個日誌功能稱謂增強。
- 前置通知:在一個方法執行之前執行。
- 後置通知:在方法執行之後執行。
- 返回後通知:在方法執行完成,當返回正確才會執行。
- 丟擲異常後通知:在方法丟擲異常後執行
- 環繞通知:在方法之前和之後執行。
切面(Aspect)
- 把增強應用到具體方法上,這個過程稱謂切。把增強用到切入點過程。
二.@AspectJ的aop操作(配置檔案實現)
- 使用表示式配置切入點
execution(<訪問修飾符>?<返回型別><方法名>(<引數>)<異常>)
1.execution(* com.huan.web.book_aop.Book.add(..))
2.execution(* com.huan.web.book_aop.Book.*(...))
3.execution(* *.*(...))
4.execution(* book*(...))
匹配所有book開頭的方法
- 配置檔案
<!--AOP-->
<!--配置物件-->
<bean id = "book" class="com.huan.web.book_aop.Book"></bean>
<bean id = "myBook" class="com.huan.web.book_aop.MyBook"></bean>
<!--配置aop操作-->
<aop:config>
<!--配置切入點-->
<aop:pointcut id="pointcut1" expression="execution(* com.huan.web.book_aop.Book.add(..))"/>
<!--配置切面
把增強用到方法上面
-->
<aop:aspect ref="myBook">
<!--配置增強型別
method:增強類裡面使用哪個方法作為前置
-->
<aop:before method="beforeBook" pointcut-ref="pointcut1"/>
<!--後置增強-->
<aop:after method="afterBook" pointcut-ref="pointcut1"/>
<!--環繞執行-->
<aop:around method="aroundBook" pointcut-ref="pointcut1"/>
</aop:aspect>
</aop:config>
- Book.java
package com.huan.web.book_aop;
public class Book {
public void add (){
System.out.println("add---------");
}
}
- myBook.java
package com.huan.web.book_aop;
public class MyBook {
public void beforeBook(){
System.out.println("前置增強------------");
}
}
- Test.java
package com.huan.web.book_aop;
import org.aspectj.lang.ProceedingJoinPoint;
public class MyBook {
public void beforeBook(){
System.out.println("前置增強------------");
}
public void afterBook(){
System.out.println("後置增強-----------");
}
// 環繞增強
public void aroundBook(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
// 方法前
System.out.println("環繞前------");
// 執行方法
proceedingJoinPoint.proceed();
// 方法後
System.out.println("環繞後------");
}
}
三.@AspectJ的aop操作(註解實現)
- 1.配置xml
<!--開啟aop掃描-->
<aop:aspectj-autoproxy/>
<!--AOP-->
<!--建立物件-->
<bean id="book" class="com.huan.web.book_aop.Book"/>
<bean id="myBook" class="com.huan.web.book_aop.MyBook"/>
- Book.java
package com.huan.web.book_aop;
public class Book {
public void add (){
System.out.println("add---------");
}
}
MyBook.java
package com.huan.web.book_aop;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
@Aspect
public class MyBook {
@Before(value = "execution(* com.huan.web.book_aop.Book.*(..))")
public void beforeBook(){
System.out.println("前置增強------------");
}
@After(value = "execution(* com.huan.web.book_aop.Book.*(..))")
public void afterBook(){
System.out.println("後置增強-----------");
}
// 環繞增強
@Around(value = "execution(* com.huan.web.book_aop.Book.*(..))")
public void aroundBook(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
// 方法前
System.out.println("環繞前------");
// 執行方法
proceedingJoinPoint.proceed();
// 方法後
System.out.println("環繞後------");
}
}
- Test.java
package com.huan.web.book_aop;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Controller;
@Controller
public class TestDemo {
@Test
public void test(){
ApplicationContext context = new ClassPathXmlApplicationContext("spring/spring-aop.xml");
Book book = (Book)context.getBean("book");
book.add();
}
}
相關文章
- Spring 面向方面程式設計 AOPSpring程式設計
- 好程式設計師Java分享Spring框架之AOP的基本配置程式設計師JavaSpring框架
- Spring AOP——Spring 中面向切面程式設計Spring程式設計
- Spring框架系列(4) - 深入淺出Spring核心之面向切面程式設計(AOP)Spring框架程式設計
- spring AOP 程式設計式應用Spring程式設計
- Spring之AOP面向切面程式設計Spring程式設計
- Spring AOP(面向切面程式設計)是什麼?Spring程式設計
- spring aop 切面程式設計控制管理事務Spring程式設計
- Spring Boot中面向方面程式設計 (AOP)教程Spring Boot程式設計
- Spring系列:基於Spring-AOP和Spring-Aspects實現AOP切面程式設計Spring程式設計
- 手寫Spring---AOP面向切面程式設計(4)Spring程式設計
- 手寫Spring---AOP面向切面程式設計(3)Spring程式設計
- Spring 面向切面程式設計AOP 詳細講解Spring程式設計
- Day67 Spring AOP(面向切面程式設計) 和代理設計模式Spring程式設計設計模式
- Spring Boot實戰系列(3)AOP面向切面程式設計Spring Boot程式設計
- Spring之旅第七站:面向切面程式設計(AOP)Spring程式設計
- AOP 面向切面程式設計程式設計
- AOP(面向切面程式設計)程式設計
- 面向切面程式設計AOP程式設計
- Spring框架系列之AOP思想Spring框架
- Util應用框架基礎(三) - 面向切面程式設計(AspectCore AOP)框架程式設計
- 設計模式之面向切面程式設計AOP設計模式程式設計
- Android AOP面向切面設計程式設計Android程式設計
- 在Spring Boot框架中使用AOPSpring Boot框架
- AOP程式設計實戰-AspectJ程式設計
- 什麼是AOP程式設計?程式設計
- Java 面向切面程式設計AOPJava程式設計
- Javascript中的AOP程式設計JavaScript程式設計
- AOP--面向切面程式設計程式設計
- Java面試題:Spring框架除了IOC和AOP,還有哪些好玩的設計模式?Java面試題Spring框架設計模式
- 【spring原始碼學習】spring的AOP面向切面程式設計的實現解析Spring原始碼程式設計
- JAVA-Spring AOP基礎 - 代理設計模式JavaSpring設計模式
- 前端js面向切面程式設計(AOP)前端JS程式設計
- Android面向切面程式設計(AOP)Android程式設計
- 漫談iOS AOP程式設計之路iOS程式設計
- 聊Javascript中的AOP程式設計JavaScript程式設計
- Spring AOP:面向切面程式設計的核心概念與實際應用Spring程式設計
- Spring框架系列(10) - Spring AOP實現原理詳解之AOP代理的建立Spring框架