全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

因Spring AOP导致@Autowired依赖注入失败的解决方法

发现问题:

之前用springAOP做了个操作日志记录,这次在往其他类上使用的时候,service一直注入失败,找了网上好多内容,发现大家都有类似的情况出现,但是又和自己的情况不太符合。后来总结自己的情况发现:方法为private修饰的,在AOP适配的时候会导致service注入失败,并且同一个service在其他的public方法中就没有这种情况,十分诡异。

解决过程:

结合查阅的资料进行了分析:在org.springframework.aop.support.AopUtils中:

public static boolean canApply(Pointcut pc, Class targetClass, boolean hasIntroductions) { 
 if (!pc.getClassFilter().matches(targetClass)) { 
  return false; 
 } 
 
 MethodMatcher methodMatcher = pc.getMethodMatcher(); 
 IntroductionAwareMethodMatcher introductionAwareMethodMatcher = null; 
 if (methodMatcher instanceof IntroductionAwareMethodMatcher) { 
  introductionAwareMethodMatcher = (IntroductionAwareMethodMatcher) methodMatcher; 
 } 
 
 Set classes = new HashSet(ClassUtils.getAllInterfacesForClassAsSet(targetClass)); 
 classes.add(targetClass); 
 for (Iterator it = classes.iterator(); it.hasNext();) { 
  Class clazz = (Class) it.next(); 
  Method[] methods = clazz.getMethods(); 
  for (int j = 0; j < methods.length; j++) { 
   if ((introductionAwareMethodMatcher != null && 
     introductionAwareMethodMatcher.matches(methods[j], targetClass, hasIntroductions)) || 
     methodMatcher.matches(methods[j], targetClass)) { 
    return true; 
   } 
  } 
 } 
 
 return false; 
}

此处Method[] methods = clazz.getMethods();只能拿到public方法。

execution(* *(..)) 可以匹配public/protected的,因为public的有匹配的了,目标类就代理了,,,再进行切入点匹配时也是能匹配的,而且cglib方式能拿到包级别/protected方法,而且包级别/protected方法可以直接通过反射调用。 

private 修饰符的切入点 无法匹配 Method[] methods = clazz.getMethods(); 这里的任何一个,因此无法代理的。 所以可能因为private方法无法被代理,导致@Autowired不能被注入。

修正办法:

     1、将方法修饰符改为public;

     2、使用AspectJ来进行注入。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# spring  # autowired注入  # autowired  # 注入失败  # 无法注入  # Spring依赖注入中的@Resource与@Autowired详解  # SpringBoot使用@Autowired为多实现的接口注入依赖  # 关于Spring的@Autowired依赖注入常见错误的总结  # Spring使用@Autowired为抽象父类注入依赖代码实例  # 详解Spring依赖注入:@Autowired  # @Resource和@Inject区别与实现原理  # spring中@Autowired自动注入依赖项的使用  # 自己的  # 都有  # 不太  # 修饰符  # 其他的  # 可以直接  # 找了  # 这种情况  # 任何一个  # 这篇文章  # 谢谢大家  # 中就  # 进行了  # 能拿到  # 网上  # 有疑问  # java  # brush  # pre  # class 


相关文章: 如何快速搭建高效简练网站?  建站之星备案流程有哪些注意事项?  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  定制建站平台哪家好?企业官网搭建与快速建站方案推荐  如何快速生成专业多端适配建站电话?  建站为何优先选择香港服务器?  建站之星微信建站一键生成小程序+多端营销系统  如何确认建站备案号应放置的具体位置?  javascript基本数据类型及类型检测常用方法小结  如何获取开源自助建站系统免费下载链接?  济南专业网站制作公司,济南信息工程学校怎么样?  广州顶尖建站服务:企业官网建设与SEO优化一体化方案  如何快速启动建站代理加盟业务?  Python lxml的etree和ElementTree有什么区别  ,南京靠谱的征婚网站?  装修招标网站设计制作流程,装修招标流程?  常州自助建站费用包含哪些项目?  C++用Dijkstra(迪杰斯特拉)算法求最短路径  婚礼视频制作网站,学习*后期制作的网站有哪些?  如何选择适合PHP云建站的开源框架?  兔展官网 在线制作,怎样制作微信请帖?  ,网站推广常用方法?  微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  北京制作网站的公司,北京铁路集团官方网站?  名字制作网站免费,所有小说网站的名字?  如何设计高效校园网站?  建站之星如何一键生成手机站?  定制建站流程步骤详解:一站式方案设计与开发指南  ,在苏州找工作,上哪个网站比较好?  网站制作网站,深圳做网站哪家比较好?  微课制作网站有哪些,微课网怎么进?  深圳企业网站制作设计,在深圳如何网上全流程注册公司?  建站之星下载版如何获取与安装?  如何在万网主机上快速搭建网站?  武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?  建站之星手机一键生成:多端自适应+小程序开发快速建站指南  c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】  如何选择可靠的免备案建站服务器?  成都网站制作报价公司,成都工业用气开户费用?  如何在Ubuntu系统下快速搭建WordPress个人网站?  活动邀请函制作网站有哪些,活动邀请函文案?  宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?  已有域名和空间如何搭建网站?  网站制作软件有哪些,制图软件有哪些?  建站之星客服服务时间及联系方式如何?  小型网站建站如何选择虚拟主机?  网站制作模板下载什么软件,ppt模板免费下载网站?  小建面朝正北,A点实际方位是否存在偏差? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。