Spring框架提供了很好的擴展性,除了能夠與各類第三方框架良好整合外,其IOC容器也容許開發者進行擴展,這種擴展甚至無需實現BeanFactory或ApplicationContext接口,而是容許經過兩個後處理器對IOC容器進行擴展。Spring提供了兩種經常使用的後處理器:框架
名稱 | 描述 |
Bean後處理器 | 這種後處理器會對容器中的Bean進行後處理,對Bean功能進行額外加強 |
容器後處理器 | 這種後處理器對IOC容器進行後處理,用於加強容器功能 |
Bean後處理器:工具
Bean後處理器是一種特殊的Bean,這種特殊Bean並不對外提供服務,它甚至能夠無須id屬性。它主要負責對容器中的其餘Bean執行後處理,例如爲容器中的目標Bean生成代理等,這種Bean被稱爲Bean後處理器。post
Bean後處理器會在Bean實例建立成功以後,對Bean實例進行進一步的加強處理。spa
Bean後處理器必須實現BeanPostProcessor接口:
代理
接口方法 | 描述 |
Object postProcessBeforeInitialization(Object bean,String name) throws BeansException | bean參數表示系統即將進行後處理的Bean實例,name參數是該Bean實例的名字 |
Object postProcessAfterInitialization(Object bean,String name) throws BeansException | bean參數表示系統即將進行後處理的Bean實例,name參數是該Bean實例的名字 |
實現該接口的Bean後處理器必須實現這兩個方法,這兩個方法會對容器中的Bean進行後處理。會在目標Bean初始化以前、初始化以後分別被回調,這兩個方法用於對容器中的Bean實例進行加強處理。接口
Bean後處理器兩個方法的回調時機:ci
BeanPostProcessor一般用來檢查標記接口,或者作如將Bean包裝成一個Proxy的事情,Spring的不少工具類,就是經過Bean後處理器完成的。開發
下面是Spring提供的兩個經常使用的後處理器:
it
名稱 | 描述 |
BeanNameAutoProxyCreator | 根據Bean實例的name屬性,建立Bean實例的代理 |
DefaultAdvisorAutoProxyCreator | 根據提供的Advisor,對容器中全部的Bean實例建立代理 |
上面提供的兩個Bean後處理器,都用於根據容器中配置的攔截器,建立代理Bean。代理Bean就是對目標Bean進行加強、在目標Bean的基礎上進行修改獲得的新Bean。io