2014-01-29 180 views
1

在我的businesslogic方法中,我使用如下注釋來進行事務管理。Spring AOP:帶有@Transactional註釋方法的方法的註釋切入點?

@Service 
public class SampleBusinessLogicImpl implements SampleBusinessLogic { 


    @Override 
    @Transactional(rollbackFor=Exception.class) 
    public Sample createSample(Sample sample) throws SampleException { 
      ... 
     } 
} 

我想執行其他方面的這種方法,我定義的方面如下:

@Aspect 
public class SampleDynamicValidationAspect { 

    private static final Logger logger = LoggerFactory.getLogger(RequestValidationAspect.class); 


    @Before("execution(public * com.rakuten.gep.sample.businesslogic.impl.SampleBusinessLogicImpl.createSample(com.rakuten.gep.sample.entity.common.Sample,..)) && args(sample,..) throws *Exception") 
    public void validate(Sample sample) throws SampleException { 
     //Dynamic validation here. 
     //If some validation is failed, wrapped the appropiate exception in SampleException 
     logger.debug("Involking Dynamic Validator"); 
     System.out.println("************** Dynaic Validator *************"); 
    } 
} 

我可以看到交易工作正常,看日誌,但是這個新聲明勸不得到執行。

任何事情?

+1

你可以檢查你的Spring配置及是否配置方面豆?在這裏發佈你的配置,因爲問題可能在那裏。 – svjn

回答

1

試圖改變的validate(樣品)來驗證(JointPoint)

1

您可以用不同的方式實現這一目標。例如,您可以找到可以測試的不同切入點選項。在下面你可以找到不同的選項,你可以嘗試讓你的方面工作。

通過執行一切配套@Transactional

execution(@Transactional * *.*(..)) 

通過執行每一個公共方法(你可以用它來測試,如果您有看點框架配置好)。

execution(public * *(..)) 

通過添加這樣的切入點,然後將它應用到你的方面:

@Pointcut("execution(@Transactional* *.*(..))") 
public void monitorRequestTargets(){} 

@Around("monitorRequestTargets()") 
public void validate(Sample sample) throws SampleException { 

讓我知道如果任何的工作,然後確定。

0

你的切入點表達應該是

@Before("execution(public * com.rakuten.gep.sample.businesslogic.impl.SampleBusinessLogicImpl.createSample(com.rakuten.gep.sample.entity.common.Sample,..) throws *Exception) && args(sample,..)")