发现问题:

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