发现问题:

之前用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
相关文章:
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
公众号网站制作网页,微信公众号怎么制作?
如何快速生成凡客建站的专业级图册?
如何在阿里云通过域名搭建网站?
装修招标网站设计制作流程,装修招标流程?
如何用PHP快速搭建CMS系统?
网站插件制作软件免费下载,网页视频怎么下到本地插件?
如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法
Thinkphp 中 distinct 的用法解析
完全自定义免费建站平台:主题模板在线生成一站式服务
建站之星×万网:智能建站系统+自助建站平台一键生成
英语简历制作免费网站推荐,如何将简历翻译成英文?
如何在宝塔面板中创建新站点?
企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?
建站之星北京办公室:智能建站系统与小程序生成方案解析
做企业网站制作流程,企业网站制作基本流程有哪些?
javascript中的try catch异常捕获机制用法分析
公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?
,南京靠谱的征婚网站?
如何高效完成独享虚拟主机建站?
独立制作一个网站多少钱,建立网站需要花多少钱?
,网页ppt怎么弄成自己的ppt?
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
如何快速生成高效建站系统源代码?
网站制作的方法有哪些,如何将自己制作的网站发布到网上?
测试制作网站有哪些,测试性取向的权威测试或者网站?
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
建站主机SSH密钥生成步骤及常见问题解答?
如何在建站之星网店版论坛获取技术支持?
如何选择适配移动端的WAP自助建站平台?
建站之星安装后如何自定义网站颜色与字体?
攀枝花网站建设,攀枝花营业执照网上怎么年审?
如何通过虚拟主机快速完成网站搭建?
python的本地网站制作,如何创建本地站点?
如何将凡科建站内容保存为本地文件?
如何生成腾讯云建站专用兑换码?
保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?
建站之星后台搭建步骤解析:模板选择与产品管理实操指南
如何在景安云服务器上绑定域名并配置虚拟主机?
网站制作公司广州有几家,广州尚艺美发学校网站是多少?
详解jQuery停止动画——stop()方法的使用
网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?
建站主机与服务器功能差异如何区分?
成都网站制作报价公司,成都工业用气开户费用?
如何挑选优质建站一级代理提升网站排名?
制作网页的网站有哪些,电脑上怎么做网页?
宝塔Windows建站如何避免显示默认IIS页面?
广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?
网站企业制作流程,用什么语言做企业网站比较好?
*请认真填写需求信息,我们会在24小时内与您取得联系。