Spring service中的方法互相调用,被调用的方法的注解为什么不生效?

如下代码, 看似没问题,但是却没能成功缓存,为什么呢?

 @Override
  public List<OfflineBaseInfo> getAllJobBaseInfo(String station,boolean skipInvalidJob) {
    List<String> jobs=getOfflineBaseJobs();
    List<OfflineBaseInfo> ret=new ArrayList<>();
    ArrayUtil.subListByCount(jobs,30,(subJobs)->{
      ret.addAll(getBaseInfoByJobs(station,subJobs,true));
    });
    return ret;
  }
  @Override
  @Cacheable(value="getBaseInfoByJobs",key="#station+'-'+#jobList")
  public List<OfflineBaseInfo> getBaseInfoByJobs(String station,List<String> jobList,boolean skipInvalidJob) {

原因就是在一个service实例里面, method a 直接调用method b, 它会直接调用自身的method b而不是经过aop拦截后的method b , 所以所有注解都失效.

所以, 应该修改method a,并传入一个service实例(被spring包装过, aop拦截过), 然后在method a里面用service.methodb的方法来调用本service的其他方法, 方可让method b的注解生效,如下代码:

@Override
  public List<OfflineBaseInfo> getAllJobBaseInfo(OfflineService service,String station,boolean skipInvalidJob) {
    List<String> jobs=service.getOfflineBaseJobs();
    List<OfflineBaseInfo> ret=new ArrayList<>();
    ArrayUtil.subListByCount(jobs,30,(subJobs)->{
      ret.addAll(service.getBaseInfoByJobs(station,subJobs,true));
    });
    return ret;
  }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值