【发布时间】:2018-03-10 10:11:12
【问题描述】:
首先让我们考虑一下我们的 CustomerRegister 服务可以简单地完成它的工作。
@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,Spring 动态创建一个代理 实现与您要注释的类相同的接口
如果我们决定调用
counterService.increment(REGISTY_METRIC);
在create方法的范围内,即使事务被回滚,计数器也会增加。
我的想法是创建一个包装 transactional proxy(包装原始 CustomerRegister 服务)的 aspect。然后 @Aspectcomponent 可以提供用 @AfterReturning(pointcut = 注释的方法
递增指标计数器。
换句话:
- 如何在另一个方面实现方面?
- 如何通过事务代理实现方面?
【问题讨论】:
标签: java spring spring-aop spring-transactions