乙個關於 Autowired和AOP的問題

2022-07-10 06:15:12 字數 748 閱讀 8554

當我需要做乙個aop日誌時,出現的這個問題。首先,專案是spring cloud 的分布式架構,當我通過aop切api介面獲取到相關資訊後,就需要呼叫db服務的儲存日誌的介面,結果然後就報錯了,說這個fegin介面not found。給我氣得,這東西咋可能沒有注入。

找了很多網路上關於aop 無法注入的問題。大概有兩種方式

(1)通過乙個配置注入這個切面bean。親測無效,別會報另外乙個異常systemlogaop.aspectof() nosuchexception

@configuration

@componentscan("com.*.*.oc")

public

class

aspectconfig

}

(2)同上通過配置注入需要使用的bean。但是需要使用的明明是乙個fegin介面。我不可能new出來啊。不像executorservice,可以new 出來然後注入。所以這個方案也不行。

最終解決方案:

看了很多部落格,發現說的是aop不在這個spring容器之中,所以這個fegin介面對aop是不可見的。(因為db還沒啟動,並且我的aop寫在common中,db啟動需要先啟動aop,然後aop又需要db中的bean。然後就套死了)   所以最後必須把這個鏈砍斷。那麼就用上了

@autowired(required = false)
required 當在容器中找不到bean時,就跳過。所以db就能啟動了 ,當aop觸發時也能找到對應的bean了

Autowired乙個介面有多個實現類

autowired是spring的註解,預設使用的是bytype的方式向bean裡面注入相應的bean。例如 autowired private userservice userservice 這段 會在初始化的時候,在spring容器中尋找乙個型別為userservice的bean實體注入,關聯到...

乙個關於EPOLLET和EPOLLLT的問題

覺得此文還不錯,收藏以備日後學習。請教大家乙個關於epollet和epolllt的問題 今天在檢視epollet和epolllt的細節的時候,發現一篇文章。但不知文中說的是否有道理,望各位大大給個明確的答覆。遊戲伺服器,我們用的是et方式。平時大家使用 epoll 時都知道其事件觸發模式有預設的 l...

關於乙個加法優化的乙個地方

include include include base.h int main int argc,char argv,char envp 下面是彙編 01291000 55 push ebp 01291001 8bec mov ebp,esp 01291003 56 push esi 0129100...