spring aop
一、基本概念
-
AOP(aspect oriented programming):面向切面编程
-
面向切面编程:在原有纵向执行流程中,针对某一个或某一些方法添加通知,形成横切面的过程就叫面向切面编程。
-
优点:高扩展性,可以释放原有功能部分逻辑,让职责更明确。
-
常用概念:
-
原有功能:切点,pointcut
-
前置通知:在切点之前执行的功能,before advice
-
后置通知:在切点之后执行的功能,after advice
-
异常通知:如果切点执行过程中出现异常,会出发异常通知,throws advice
-
切面:所有功能统称切面
-
织入:把切面嵌入到原有功能的过程
-
spring提供2种AOP实现方式
-
Schema-based
-
每个通知需要实现接口或类
-
在<aop:advisor>中配置
-
AspectJ
-
每个通知不需要实现接口或类
-
在<aop:aspect>中配置
二、Schema-based
-
applicationContext.xml:
<bean id="demobefore" class="com.test.advice.Before"></bean>
<bean id="demoafter" class="com.test.advice.After"></bean>
<aop:config>
<aop:pointcut expression="execution(* com.test.aop.Demo.demo2())" id="demopoint"/>
<aop:advisor advice-ref="demobefore" pointcut-ref="demopoint"/>
<aop:advisor advice-ref="demoafter" pointcut-ref="demopoint"/>
</aop:config>
<bean id="demo" class="com.test.aop.Demo"></bean>
-
前置通知类:
package com.test.advice;
import java.lang.reflect.Method;
import org.springframework.aop.MethodBeforeAdvice;
public class Before implements MethodBeforeAdvice{
@Override
public void before(Method method, Object[] args, Object target) throws Throwable {
System.out.println("before demo2...");
}
}
-
后置通知类:
package com.test.advice;
import java.lang.reflect.Method;
import org.springframework.aop.AfterReturningAdvice;
public class After implements AfterReturningAdvice{
@Override
public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {
System.out.println("after demo2...");
}
}