aop概念
概念:面向切面編程,即橫向抽取替代縱向繼承。在不修改源代碼的前提下增強代碼
aop術語
- joinpoint連接點:類中可以被增強的方法(指類中的方法)
- pointcut切入點:類中實際被增強的方法(并不是所有的方法都被增強了)
- advice增強/通知:實際擴展功能的邏輯,有下面幾種類型
- 前置增強:方法執(zhí)行之前
- 后置增強:方法執(zhí)行之后
- 異常增強:出現(xiàn)異常的時候
- 最終增強:在后置之后執(zhí)行
- 環(huán)繞增強:方法之前和之后執(zhí)行
- aspect切面:把增強用到切入點的過程
- target目標:被增強方法所在的類
- weaving織入:將增強應用到目標的過程
AOP
Spring實現(xiàn)aop操作有兩種方式:1、Spring-aop 2、AspectJ
1、spring-aop(使用xml文件實現(xiàn)AOP)
使用步驟
1、導包
spring-aop.jar、aspectjweaver.jar
<!-- 被增強的類 -->
<bean class="com.hemi.bean.Car" id="car"></bean>
<!-- 實施增強的類 -->
<bean class="com.hemi.bean.CarUtils" id="carUtils"></bean>
<!-- 配置aop -->
<aop:config>
<!-- 切入點:被增強的方法 -->
<aop:pointcut expression="execution(public void com.hemi.bean.Car.run(..))" id="pointcut1"/>
<!-- 切面:將切面運用到切入點的過程 -->
<aop:aspect ref="carUtils">
<aop:before method="show" pointcut-ref="pointcut1"/>
</aop:aspect>
</aop:config>
標簽詳解

AspectJ(使用注解實現(xiàn)AOP)
使用步驟
1、導包 spring-aspectj.jar、aspectjweaver.jar
2、通過xml文件開啟aspectj注解
<aop:aspectj-autoproxy/>
3、創(chuàng)建增強類
@Aspect//1、標示該類是增強類
public class StudentUtils {
//2、配置切入點,括號內(nèi)是表達式
@Pointcut("execution(* com.hemi.bean.Student.study(..))")
public void pointcut(){}
//3、前置增強,括號內(nèi)寫切入點的名稱,即上面的方法名
@Before("pointcut()")
public void high(){
System.out.println("玩會手機。。。。");
}
}
注解詳解
2.png
重點關注
- @After
3.png
- @AfterThrowing
4.png
- @Around
5.png