2011-10-03 65 views
1

我在方法上使用注释。每当有这样的警告时,我想用aop拦截它。我错过了什么。spring aop not firing for annotation

<bean id="emailAdvice" class="com.merc.spring.aop.advice.MultiThreadEmailAdvice"/> 

<aop:config> 
    <aop:aspect ref="emailAdvice"> 
     <aop:around 
      method="fork" 
      pointcut="execution(* org.springframework.mail.javamail.JavaMailSenderImpl.send(..))"/> 
    </aop:aspect> 
    <aop:aspect ref="emailAdvice"> 
     <aop:around method="sendEmailAdvice" pointcut="@annotation(sendMailAnnotation)" arg-names="sendMailAnnotation"/> 
    </aop:aspect> 
</aop:config> 
@SendMailAnnotation() 
public void testAnnotationEmail() { 
    System.out.println("send an email"); 
} 

@Aspect 
public class MultiThreadEmailAdvice { 
    public void sendEmailAdvice(ProceedingJoinPoint pjp, SendMailAnnotation sendMailAnnotation) throws Throwable { 
     System.out.println("before method execution"); 

     pjp.proceed(); 

     System.out.println("after method execution"); 

     System.out.println(sendMailAnnotation.from()); 
    } 
} 

回答

0

试图改变

@annotation(sendMailAnnotation) 

@annotation(<package>.SendMailAnnotation). 

在你的bean定义。

防爆

<aop:around method="sendEmailAdvice" pointcut="@annotation(com.merc.spring.aop.advice.SendMailAnnotation)" arg-names="sendMailAnnotation"/> 
+0

如果我这样做,我得到以下错误java.lang.IllegalArgumentException:错误在:: 0正式无约束切入点 – user373201

+0

''必须替换为您的注释包前' com.merc.spring.aop.advice',已更新答案 –

+0

正是我所知 user373201

0

原来调用注解的方法的服务类没有Spring管理。一旦在春天管理,它运作良好

+1

我想你忘了接受你的回答? – kamaci