背景:
1、我要使用工厂模式实现业务代码
2、我需要使用全局事务
个人的代码思路
1、定义统一业务接口类(IBusService),每种业务类型做不同的实现(BusServiceImpl),实现类指定serviceName给spring的IOC
2、定义工厂接口类(IBusFactoryService),其实现通过入参的类型不同获取不同的实现类
遇到的问题:
1、每个BusServiceImpl的实现方法上添加@GlobalTransactional(rollbackFor = Exception.class)启动异常
2、把@GlobalTransactional(rollbackFor = Exception.class)放到IBusService的方法上能启动,但是不起作用
解决方案:
1、单独创建一个聚合的接口类(IBusBaseService)在其实现类中的方法(Test)调用IBusFactoryService获取IBusService做业务处理
2、在IBusBaseService的实现类中的方法上(Test)上添加@GlobalTransactional(rollbackFor = Exception.class)即可生效
But,Why?
哪位大佬不吝赐教指点一下?感激不尽
目前由于个人时间问题,没有深究。个人理解的是,seata注解使用的是AOP思想,而bean工厂获取的是一个抽象的接口类,所以导致seata无法指定具体的切入点导致的。