"advisor"这个概念来自Spring1.2对AOP的支持,而在AspectJ中没有等价的概念。Advisor表示只有一个通知和一个切入点的切面,Advisor可以使用<aop:config>标签下的<aop:advisor>标签定义,下面配置一个前置通知的Advisor:
2 |
<aop:pointcut id="pointcut" expression="execution
(* com.sohu.tv.crm.service.*.*(..))"/> |
3 |
<aop:advisor advice-ref="beforeAdvice" pointcut-ref="pointcut" /> |
5 |
<bean id="beforeAdvice" class="com.sohu.tv.crm.aop.BeforeAdviceImpl"/> |
BeforeAdviceImpl类实现MethodBeforeAdvice接口:
1 |
public class BeforeAdviceImpl implements MethodBeforeAdvice
{ |
2 |
private static final Logger
LOGGER = LoggerFactory.getLogger(BeforeAdviceImpl.class); |
5 |
public void before(Method
method, Object[] args, Object target) throws Throwable
{ |
6 |
LOGGER.info("method
name:" +
method.getName()); |
7 |
LOGGER.info("arguments:" +
args); |
这样就实现了前置通知,其他的还包括后置返回通知接口AfterReturningAdvice :
1 |
public class AfterReturningAdviceImpl implements AfterReturningAdvice
{ |
2 |
private static final Logger
LOGGER = LoggerFactory.getLogger(AfterReturningAdviceImpl.class); |
5 |
public void afterReturning(Object
result, Method method, Object[] args, Object target) throws Throwable
{ |
6 |
LOGGER.info("result:" +
result); |
Advisor大部分情况下和transaction advice一起使用,如下:
02 |
<aop:pointcut id="businessService" |
03 |
expression="execution(*
com.xyz.myapp.service.*.*(..))"/> |
06 |
pointcut-ref="businessService" |
07 |
advice-ref="tx-advice"/> |
11 |
<tx:advice id="tx-advice"> |
13 |
<tx:method name="*" propagation="REQUIRED"/> |
http://my.oschina.net/mushui/blog/161273
此人博客中有关于AOP相关的知识,本文也来源于此