2012-12-13 154 views
2

我需要使用spring-aop攔截帶註釋的方法。 我已經有了攔截器,它實現了AOP聯盟的MethodInterceptor。使用Spring @Configuration和MethodInterceptor攔截帶註釋的方法

下面是代碼:

@Configuration 
public class MyConfiguration { 

    // ... 

    @Bean 
    public MyInterceptor myInterceptor() { 
     return new MyInterceptor(); 
    } 
} 
@Target(ElementType.METHOD) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface MyAnnotation { 
    // ... 
} 
public class MyInterceptor implements MethodInterceptor { 

    // ... 

    @Override 
    public Object invoke(final MethodInvocation invocation) throws Throwable { 
     //does some stuff 
    } 
} 

從我一直在讀它曾經是我可以用一個@SpringAdvice批註指定當攔截器攔截要的東西,但不再存在。

任何人都可以幫助我嗎?

非常感謝!

盧卡斯

回答

1

如果有人有興趣在這......顯然這無法做到的。 爲了單獨使用Java(並且沒有XML類),您需要使用帶有@aspect註釋的AspectJ和Spring。

這是代碼是如何結束:

@Aspect 
public class MyInterceptor { 

    @Pointcut(value = "execution(* *(..))") 
    public void anyMethod() { 
     // Pointcut for intercepting ANY method. 
    } 

    @Around("anyMethod() && @annotation(myAnnotation)") 
    public Object invoke(final ProceedingJoinPoint pjp, final MyAnnotation myAnnotation) throws Throwable { 
     //does some stuff 
     ... 
    } 
} 

如果別人發現了一些不同的東西,請隨意張貼了!

問候,

盧卡斯

0

MethodInterceptor可以通過如下所示註冊Advisor豆被調用。

@Configurable 
@ComponentScan("com.package.to.scan") 
public class AopAllianceApplicationContext {  

    @Bean 
    public Advisor advisor() { 
     AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut();  
     pointcut.setExpression("@annotation(com.package.annotation.MyAnnotation)"); 
     return new DefaultPointcutAdvisor(pointcut, new MyInterceptor()); 
    } 

} 
相關問題