全网整合营销服务商

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

免费咨询热线: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 


相关文章: 建站之星微信建站一键生成小程序+多端营销系统  湖北网站制作公司有哪些,湖北清能集团官网?  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  b2c电商网站制作流程,b2c水平综合的电商平台?    建站之星24小时客服电话如何获取?  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  如何在西部数码注册域名并快速搭建网站?  如何在香港服务器上快速搭建免备案网站?  建站之星官网登录失败?如何快速解决?  如何获取上海专业网站定制建站电话?  建站之星3.0如何解决常见操作问题?  如何通过cPanel快速搭建网站?  如何选择高效稳定的ISP建站解决方案?  实现虚拟支付需哪些建站技术支撑?  道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?  北京的网站制作公司有哪些,哪个视频网站最好?  天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?  宝塔建站助手安装配置与建站模板使用全流程解析  如何确保西部建站助手FTP传输的安全性?  c# 在高并发下使用反射发射(Reflection.Emit)的性能  html制作网站的步骤有哪些,iapp如何添加网页?  太平洋网站制作公司,网络用语太平洋是什么意思?  c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】  官网自助建站平台指南:在线制作、快速建站与模板选择全解析  网站制作话术技巧,网站推广做的好怎么话术?  贸易公司网站制作流程,出口贸易网站设计怎么做?  做企业网站制作流程,企业网站制作基本流程有哪些?  如何快速搭建高效香港服务器网站?  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  电商平台网站制作流程,电商网站如何制作?  专业公司网站制作公司,用什么语言做企业网站比较好?  如何快速搭建高效服务器建站系统?  网站制作公司排行榜,四大门户网站排名?  无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?  如何在IIS7中新建站点?详细步骤解析  七夕网站制作视频,七夕大促活动怎么报名?  php json中文编码为null的解决办法  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】  Python文件管理规范_工程实践说明【指导】  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  建站org新手必看:2024最新搭建流程与模板选择技巧  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  如何在橙子建站中快速调整背景颜色?  家具网站制作软件,家具厂怎么跑业务?  营销式网站制作方案,销售哪个网站招聘效果最好?  网站制作企业,网站的banner和导航栏是指什么?  个人网站制作流程图片大全,个人网站如何注销? 

您的项目需求

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