飞哥小码农 2015-01-28 12:48
浏览 675

spring + hibernate aop的问题

小弟刚刚学spring aop 遇到下面郁闷的问题

@Service

@Transactional(readOnly = true)
public class ManagerService {
@Autowired
private ManagerDao managerDao;

@Transactional(readOnly = false)
public Integer saveManager(String name) {
    Manager manager = new Manager();
    manager.setName(name);
    return managerDao.save(manager);
}

@Transactional(readOnly = false)
public Manager updateManager(Integer id, String name) {
    Manager manager = managerDao.get(id);
    manager.setName(name);
    return managerDao.update(manager);
}

public Manager get(Integer id) {
    return managerDao.get(id);
}

}

@Service
@Transactional(readOnly = true)
public class LogService {
@Autowired
private LogDao logDao;

@Transactional(readOnly = false)
public Integer save(String signature, String clazz, String exceptionClass) {
    Log log = new Log();
    log.setClazz(clazz);
    log.setExceptionClass(exceptionClass);
    log.setSignature(signature);

    return logDao.save(log);
}

}

@Aspect
@Component
public class ManagerServiceAOP {
@Autowired
private LogService logService;

private String signature;
private String clazz;
private String exceptionClass;

@Pointcut("execution(* org.yefei.app.service.*.*(..)) && !execution(* org.yefei.app.service.LogService.*(..))")
public void execute() {

}

@After("execute()")
public void after(JoinPoint jp) {
    signature = jp.getSignature().toShortString();
    clazz = jp.getTarget().toString();
    exceptionClass = "没有异常抛出";

    logService.save(signature, clazz, exceptionClass);
}

@AfterThrowing(pointcut = "execute()", throwing = "ex")
public void afterThrowing(JoinPoint jp, Throwable ex) {
    logService.save(jp.getSignature().toShortString(), jp.getTarget()
            .toString(), ex.getClass().toString());
}

}

在我执行下面代码时
@Test
public void testUpdateManager() {
managerService.updateManager(1, "张三");
}

发现aop类中的logService在执行后在控制台中有打印插入语句,但是数据库中却没有插入,不知道为什么。其他的插入操作都是可以执行的

上面的代码会抛异常,NullException,应该是对应aop中afterThrowing

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 MCNP里如何定义多个源?
    • ¥20 双层网络上信息-疾病传播
    • ¥50 paddlepaddle pinn
    • ¥20 idea运行测试代码报错问题
    • ¥15 网络监控:网络故障告警通知
    • ¥15 django项目运行报编码错误
    • ¥15 请问这个是什么意思?
    • ¥15 STM32驱动继电器
    • ¥15 Windows server update services
    • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏