首先让我们考虑一下我们有简单地完成工作的CustomerRegister服务。是否可以创建一个方法,该方法对@Transaction最初注释的方法提供了@AfterReturnin操作?
@Service
class CustomerRegister {
private final CustomerRegister customerRegister;
CustomerRegister(CustomerRegister customerRegister) {
this.customerRegister = customerRegister;
}
@Transactional
public void create(Customer customer) {
customerRegister.persist(customer);
}
}
后来决定可以很好地拥有关于该注册表操作的业务度量标准。 常见的选择是使用org.springframework.boot.actuate.metrics.CounterService
需要注意的是:
使用
@Transactional
,春季动态创建(S)一个代理, 实现相同的接口作为类你标注
如果我们决定调用
counterService.increment(REGISTY_METRIC);
在创建方法的范围内,那么计数器将会增加,即使在事务中是回滚。
我的想法是创建一个方面是包装了transactional proxy(其原包装服务CustomerRegister)。然后@Aspect
组件可以提供用@AfterReturning(pointcut =
注释的方法,即 增加公制计数器。
换句话说
- 如何实现在另一个方面方面?
- 如何在事务代理上实现方面?