2013-07-15 65 views
3

我有Aspect類和方法clear()Spring AOP,切入點表達式:具有特定參數的註釋

@Aspect 
public class Clear 
{ 
    @After("@annotation(org.springframework.transaction.annotation.Transactional)") 
    public void clear() 
    { 
     // do smth 
    } 
} 

現在我想方法的每次執行與註釋@TransactionalreadOnly = true

@Transactional(readOnly = true) 
public void someMethod() 
{ 
    //... 
} 

後調用這個方面是有辦法做到這一點無需定製註釋?

回答

3

我覺得你離得很近。

在您的clear方法中,您應該輸入JoinPoint類型的參數。該參數將在運行時由Spring自動填充,並且可以使用它來獲取特定連接點的詳細信息,包括java.lang.reflect.Method,它將包含您之後的註釋。

我想是這樣的:

@Aspect 
public class Clear 
{ 
    @After("@annotation(org.springframework.transaction.annotation.Transactional)") 
    public void clear(final JoinPoint joinPoint) 
    { 
     final Method method = ((MethodSignature) joinPoint.getSignature()).getMethod(); 
     final Transactional txAnnotation = methood.getAnnotation(Transactional.class); 
     final boolean isReadOnly = txAnnotation.readOnly(); 

     //do conditional work based on isReadOnly 
    } 
} 
+0

所以,簡單的解決方案。謝謝! – Ilya