全网整合营销服务商

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

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


相关文章: 潮流网站制作头像软件下载,适合母子的网名有哪些?  中山网站推广排名,中山信息港登录入口?  安云自助建站系统如何快速提升SEO排名?  高防服务器:AI智能防御DDoS攻击与数据安全保障  建站主机核心功能解析:服务器选择与网站搭建流程指南  如何通过虚拟机搭建网站?详细步骤解析  如何在建站之星绑定自定义域名?  PHP正则匹配日期和时间(时间戳转换)的实例代码  较简单的网站制作软件有哪些,手机版网页制作用什么软件?  C++如何将C风格字符串(char*)转换为std::string?(代码示例)  哈尔滨网站建设策划,哈尔滨电工证查询网站?  北京制作网站的公司,北京铁路集团官方网站?  如何通过网站建站时间优化SEO与用户体验?  广州营销型建站服务商推荐:技术优势与SEO优化解析  内部网站制作流程,如何建立公司内部网站?  小程序网站制作需要准备什么资料,如何制作小程序?  ,想在网上投简历,哪几个网站比较好?  如何用已有域名快速搭建网站?  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  网站建设制作、微信公众号,公明人民医院怎么在网上预约?  Python如何创建带属性的XML节点  jQuery 常见小例汇总  nginx修改上传文件大小限制的方法  上海网站制作开发公司,上海买房比较好的网站有哪些?  如何通过VPS建站无需域名直接访问?  如何通过可视化优化提升建站效果?  建站主机如何选?性能与价格怎样平衡?  实惠建站价格推荐:2025年高性价比自助建站套餐解析  建站之星导航配置指南:自助建站与SEO优化全解析  如何快速搭建高效WAP手机网站吸引移动用户?  如何用虚拟主机快速搭建网站?详细步骤解析  建站之星如何实现网站加密操作?  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  建站之星3.0如何解决常见操作问题?  黑客入侵网站服务器的常见手法有哪些?  如何快速生成高效建站系统源代码?  如何用腾讯建站主机快速创建免费网站?  ppt制作免费网站有哪些,ppt模板免费下载网站?  如何快速搭建安全的FTP站点?  焦点电影公司作品,电影焦点结局是什么?  如何获取上海专业网站定制建站电话?  浅谈Javascript中的Label语句  武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?  浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?  打鱼网站制作软件,波克捕鱼官方号怎么注册?  高防服务器租用如何选择配置与防御等级?  广州网站建站公司选择指南:建站流程与SEO优化关键词解析  如何通过VPS建站实现广告与增值服务盈利?  香港服务器建站指南:免备案优势与SEO优化技巧全解析  山东云建站价格为何差异显著? 

您的项目需求

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