提示BeanPostProcessorChecker:is not eligible for getting processed by all BeanPostProcessors的原因

今天有讀者朋友反饋在調試本書15章的源碼時出現“BeanPostProcessorChecker:xxx is not eligible for getting processed by all BeanPostProcessors”的INFO級別的提示,該讀者想知道該錯誤出現的原因。相關提示,如下圖所示。
在這裏插入圖片描述

提示的解答:

該信息提示的意思是:BeanPostProcessorChecker檢查到xxx不適合所有的BeanPostProcessor來處理。即,存在出現“自動注入”不合適或無效的信息。

是否爲錯誤:

對於INFO級別的輸出信息來說,一般情況下並不算錯誤,WARN級別的也不算錯誤,這其實只是警告。

出現原因:

雖然不是錯誤,但是我們需要找到原因。

1. 什麼是BeanPostProcessor

在瞭解出現提示的原因之前,我們先來了解什麼是BeanPostProcessor。
BeanPostProcessor是Spring的Bean工廠中的鉤子(Hook),允許Spring框架在新創建Bean實例時對其進行定製化修改。它本身也是一個Bean,在通常情況下,其實例化順序要優先於普通的Bean。因爲有時BeanPostProcessor也會依賴一些Bean,所以,會存在一些普通Bean的實例化早於BeanPostProcessor的情況,因此就會造成一些問題。

2. 出現這個提示的原因

有些Bean不是被所有BeanPostProcessor處理過
些Bean不是被BeanFactory註冊的所有BeanPostProcessor處理過,BeanPostProcessor控制Bean初始化開始和初始化結束的接口。實現BeanPostProcessor的Bean會在其他Bean初始化之前完成,BeanPostProcessor會通過接口方法檢查其他類型的Bean並做處理。通常auto-proxy只是針對部分Bean的進行處理的,所以某個Bean不被“完全”處理也很正常。
存在沒有實現接口的Bean或FactoryBean
有些BeanPostProcessor不處理沒有實現接口的Bean或FactoryBean。

發佈了17 篇原創文章 · 獲贊 19 · 訪問量 6619
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章