执行Spring AOP DAO中的建议在服务中返回null

Siv*_*i D 4 aop spring

我已经在建议中写了我的切入点和习惯,这将执行一个Dao方法.

切入点

@Pointcut("execution(* com.dao.*.get*(..))")
    public void creditPointcut(){
    }
Run Code Online (Sandbox Code Playgroud)

围绕建议

@Around("creditPointcut()") 
    public void around(ProceedingJoinPoint point) throws Throwable{
        LOGGER.info("Method name: "+point.getSignature().getName()+" started");
        point.proceed();
        LOGGER.info("Method name: "+point.getSignature().getName()+" ended");

    }
Run Code Online (Sandbox Code Playgroud)

目标 - 道方法

public Account getAccountDetails(int accntNo) {
        Session session = sessionFactory.getCurrentSession();
        Query query = session.createQuery("from Account where accountNo=:acctNo");
        query.setInteger("acctNo", accntNo);
        Account account = (Account)query.list().get(0);
        return account;
    }
Run Code Online (Sandbox Code Playgroud)

但是,这个建议在我的服务中返回null帐户.

服务层方法

@Override
    @Transactional(isolation=Isolation.READ_COMMITTED )
    public Account getAccountDetails(int accntNo) {
        Account account = accountDao.getAccountDetails(accntNo);
        return account;
    }
Run Code Online (Sandbox Code Playgroud)

在Dao执行周围的建议之后,请帮助我为什么我在我的服务中获得空帐户.

Ori*_*Dar 16

那是因为你没有从建议中返回任何东西:

@Around("creditPointcut()") 
public Object around(ProceedingJoinPoint point) throws Throwable{
    LOGGER.info("Method name: "+point.getSignature().getName()+" started");
    Object ret = point.proceed();
    LOGGER.info("Method name: "+point.getSignature().getName()+" ended");
    return ret;

}
Run Code Online (Sandbox Code Playgroud)