spring 中的<aop:advisor>和<aop:aspect>有什么区别
发布网友
发布时间:2022-04-23 14:59
我来回答
共1个回答
热心网友
时间:2022-04-12 21:04
在spring的配置中,会用到这两个标签.那么他们的区别是什么呢?
<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 {
}
}