切面 = 切点 + 增强(通知)
第一种方式:横切逻辑放到某个类中,由方法定义,在声明的时候再指定哪个方法的逻辑进行前置增强或后置增强
<bean id="testAdvice" class="com.myspring.app.aop.MyAdvice"/> //切面代码
使用<aop:aspect>配置时,
如果切面代码是自动注入的bean,那么<aop:aspect>的ref属性直接写bean的注入名字就可以了!
<aop:config>
<aop:aspect ref="testAdvice" id="testAspect">
<aop:pointcut expression="(execution(* com.myspring.app.aop.TestPoint.*(..)))" id="testPointcut"/>
<aop:before method="doBefore" pointcut-ref="testPointcut"/>
</aop:aspect>
</aop:config>
第二种方式:分前置增强逻辑类、后置增强逻辑类,不同的通知模式由不同类指定
<aop:config>
<aop:pointcut expression="(execution(* com.myspring.app.aop.TestPoint.*(..)))" id="mypoint"/>
<aop:advisor advice-ref="testAdvice" pointcut-ref="mypoint"/>
</aop:config>
注意:2种格式的书写次序.
=========================================================================
package com.myspring.app.aop;
import java.lang.reflect.Method;
import org.aspectj.lang.JoinPoint;
import org.springframework.aop.MethodBeforeAdvice;
/**
* 方法前置通知
* @author Michael
*
*/
@Component("myAdvice")//如果是自动装配,在定义切面的时候直接写在ref属性里就可以了
public class MyAdvice implements MethodBeforeAdvice{
//如果使用aop:advisor配置,那么切面逻辑必须要实现advice接口才行!否则会失败!
@Override
public void before(Method method, Object[] args, Object target) throws Throwable {
System.out.println("前置通知");
}
//如果是<aop:aspect>配置,编写一般的方法就可以了,然后在切面配置中指定具体的方法名称!
public void doBefore(JoinPoint point) throws Throwable {
}
}
————————————————
版权声明:本文为CSDN博主「行者_java」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u011710466/article/details/52888277