synchronized(userID.toString().intern()){ 获取代理对象 IVoucherOrderService proxy = (IVoucherOrderService) AopContext.currentProxy(); return proxy.createVoucherOrder(voucherId);//proxy为当前代理对象,这样就可以被spring管理 } } //插入情况使用悲观锁 //不能把synchronized加在方法上,这样每个用户都是用的一个锁,应该在用户ID上加锁 @Transactional public Result createVoucherOrder(Long voucherId) {}
Result createVoucherOrder(Long voucherId);在代理对象(接口)中需要创建对应方法,才能在实现类中使用对应方法
不这样使用的话@Transactional事务会失效
pop.xml中加入对应包--动态代理的模式
<dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> </dependency>
启动类加入注解暴露这个对象
@EnableAspectJAutoProxy(exposeProxy = true)