发现问题:

之前用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小时内与您取得联系。