真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

使用SpringAOP時(shí)出現(xiàn)@Autowired依賴無(wú)法注入如何解決-創(chuàng)新互聯(lián)

這篇文章給大家介紹使用Spring AOP時(shí)出現(xiàn)@Autowired依賴無(wú)法注入如何解決,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

成都創(chuàng)新互聯(lián)專業(yè)提供IDC機(jī)房托管服務(wù),為用戶提供五星數(shù)據(jù)中心、電信、雙線接入解決方案,用戶可自行在線購(gòu)買IDC機(jī)房托管服務(wù),并享受7*24小時(shí)金牌售后服務(wù)。

發(fā)現(xiàn)問(wèn)題:

之前用springAOP做了個(gè)操作日志記錄,這次在往其他類上使用的時(shí)候,service一直注入失敗,找了網(wǎng)上好多內(nèi)容,發(fā)現(xiàn)大家都有類似的情況出現(xiàn),但是又和自己的情況不太符合。后來(lái)總結(jié)自己的情況發(fā)現(xiàn):方法為private修飾的,在AOP適配的時(shí)候會(huì)導(dǎo)致service注入失敗,并且同一個(gè)service在其他的public方法中就沒(méi)有這種情況,十分詭異。

解決過(guò)程:

結(jié)合查閱的資料進(jìn)行了分析:在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的,因?yàn)閜ublic的有匹配的了,目標(biāo)類就代理了,,,再進(jìn)行切入點(diǎn)匹配時(shí)也是能匹配的,而且cglib方式能拿到包級(jí)別/protected方法,而且包級(jí)別/protected方法可以直接通過(guò)反射調(diào)用。

private 修飾符的切入點(diǎn) 無(wú)法匹配 Method[] methods = clazz.getMethods(); 這里的任何一個(gè),因此無(wú)法代理的。 所以可能因?yàn)閜rivate方法無(wú)法被代理,導(dǎo)致@Autowired不能被注入。

修正辦法:

     1、將方法修飾符改為public;

     2、使用AspectJ來(lái)進(jìn)行注入。

關(guān)于使用Spring AOP時(shí)出現(xiàn)@Autowired依賴無(wú)法注入如何解決就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。


當(dāng)前題目:使用SpringAOP時(shí)出現(xiàn)@Autowired依賴無(wú)法注入如何解決-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)鏈接:http://weahome.cn/article/gejss.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部