激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 因Spring AOP導致@Autowired依賴注入失敗的解決方法

因Spring AOP導致@Autowired依賴注入失敗的解決方法

2020-11-30 14:55ngulc Java教程

這篇文章主要給大家介紹了因Spring AOP導致@Autowired依賴注入失敗的解決方法,文中通過示例代碼給大家介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面跟著小編來一起學習學習吧。

發現問題:

之前用springAOP做了個操作日志記錄,這次在往其他類上使用的時候,service一直注入失敗,找了網上好多內容,發現大家都有類似的情況出現,但是又和自己的情況不太符合。后來總結自己的情況發現:方法為private修飾的,在AOP適配的時候會導致service注入失敗,并且同一個service在其他的public方法中就沒有這種情況,十分詭異。

解決過程:

結合查閱的資料進行了分析:在org.springframework.aop.support.AopUtils中:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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來進行注入。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:http://www.cnblogs.com/lcngu/p/6246950.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: jizzjizzjizz少妇| 护士hd老师fre0性xxx | 羞羞答答影院 | 91av在线免费视频 | 精品一区二区三区免费爱 | 最新91在线视频 | 久久久久久久久国产精品 | 四虎久草 | 国产一级桃视频播放 | 久久男人 | 调教小男生抽打尿孔嗯啊视频 | 91网在线播放 | 手机黄色小视频 | 视频一区国产精品 | 国产精品中文在线 | 黄色免费电影网址 | 欧美一级高清免费 | 91免费高清视频 | 欧美一级鲁丝片免费看 | 欧美成人免费香蕉 | 午夜精品视频免费观看 | 欧美成人一区二区三区 | 色综合777| 免费观看黄色一级视频 | 亚洲欧美日韩中文在线 | 天天骑夜夜操 | 自拍偷拍亚洲图片 | 国产日韩在线观看视频 | 亚洲一区在线免费视频 | 午夜视频久久 | 久久91精品久久久久清纯 | 人人看人人艹 | 久久99国产精品免费网站 | 91综合在线观看 | 久久精品一区二区三区四区五区 | 日本在线不卡一区二区 | 欧美激情猛片xxxⅹ大3 | 青草av.久久免费一区 | 中文字幕精品一二三四五六七八 | 成人毛片100部免费观看 | 免费一级在线观看 |