2011-10-03 36 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