'10個Spring&SpringBoot高階用法,你是否都知道?'

Java jwfy的學習分享 2019-08-14
"

分享自己在Java方面的所思所想,希望你看完之後能有更多更深入的瞭解

本人微信公眾號(jwfy的學習分享),歡迎關注~

目錄

1、獲取Spring IOC容器(Aware)

2、動態註冊bean信息(BeanFactoryPostProcessor)

3、動態修改bean信息(BeanFactoryPostProcessor)

4、獲取Spring IOC容器所有bean信息(BeanFactoryPostProcessor)

5、為兼容不同SpringBoot 版本,以實現選擇性加載bean(條件註解)

6、自定義工廠bean實例化(工廠Bean、AbstractFactoryBean)

7、Spring MVC 輸出所有的URL信息(Spring MVC)

8、通過Spring事件機制完成服務啟動後的信息整理(類似於Dubbo的服務暴露機制)

9、通過Spring事件機制獲取HTTP請求調用詳情

10、服務啟動後的初始化任務CommandLineRunner

最後有相關知識點的詳細說明推薦~

1、獲取Spring IOC容器(Aware)

"

分享自己在Java方面的所思所想,希望你看完之後能有更多更深入的瞭解

本人微信公眾號(jwfy的學習分享),歡迎關注~

目錄

1、獲取Spring IOC容器(Aware)

2、動態註冊bean信息(BeanFactoryPostProcessor)

3、動態修改bean信息(BeanFactoryPostProcessor)

4、獲取Spring IOC容器所有bean信息(BeanFactoryPostProcessor)

5、為兼容不同SpringBoot 版本,以實現選擇性加載bean(條件註解)

6、自定義工廠bean實例化(工廠Bean、AbstractFactoryBean)

7、Spring MVC 輸出所有的URL信息(Spring MVC)

8、通過Spring事件機制完成服務啟動後的信息整理(類似於Dubbo的服務暴露機制)

9、通過Spring事件機制獲取HTTP請求調用詳情

10、服務啟動後的初始化任務CommandLineRunner

最後有相關知識點的詳細說明推薦~

1、獲取Spring IOC容器(Aware)

10個Spring&SpringBoot高階用法,你是否都知道?

通過ApplicationContextAware實現,在bean實例化後,經過Aware掃描時,發現實現了ApplicationContextAware接口,就會調用setApplicationContext方法注入ApplicationContext對象,這也是非常經典的一種獲取上下文的方法。

2、動態註冊bean信息(BeanFactoryPostProcessor)

"

分享自己在Java方面的所思所想,希望你看完之後能有更多更深入的瞭解

本人微信公眾號(jwfy的學習分享),歡迎關注~

目錄

1、獲取Spring IOC容器(Aware)

2、動態註冊bean信息(BeanFactoryPostProcessor)

3、動態修改bean信息(BeanFactoryPostProcessor)

4、獲取Spring IOC容器所有bean信息(BeanFactoryPostProcessor)

5、為兼容不同SpringBoot 版本,以實現選擇性加載bean(條件註解)

6、自定義工廠bean實例化(工廠Bean、AbstractFactoryBean)

7、Spring MVC 輸出所有的URL信息(Spring MVC)

8、通過Spring事件機制完成服務啟動後的信息整理(類似於Dubbo的服務暴露機制)

9、通過Spring事件機制獲取HTTP請求調用詳情

10、服務啟動後的初始化任務CommandLineRunner

最後有相關知識點的詳細說明推薦~

1、獲取Spring IOC容器(Aware)

10個Spring&SpringBoot高階用法,你是否都知道?

通過ApplicationContextAware實現,在bean實例化後,經過Aware掃描時,發現實現了ApplicationContextAware接口,就會調用setApplicationContext方法注入ApplicationContext對象,這也是非常經典的一種獲取上下文的方法。

2、動態註冊bean信息(BeanFactoryPostProcessor)

10個Spring&SpringBoot高階用法,你是否都知道?

通過實現BeanDefinitionRegistryPostProcessor接口完成bean的動態注入,而且圖中的動態生成還相比一般的註冊更加複雜,往其中添加了類似於@Value一般的屬性值,儘管我們後續無任何操作,Spring在進行數據填充的時候還是成功的從Properties文件中獲取到了有效數據,這主要依靠的是PropertyPlaceHolderConfigure。

也有更簡單的方法實現bean的動態註冊,例如

((DefaultListableBeanFactory) beanFactory).registerBeanDefinition("school1", beanDefinition)

其實動態註冊bean非常簡單,只需要獲取到當前的IOC容器,然後調用registerBeanDefinition即可,至於獲取當前IOC容器就可以使用Aware、BeanFactoryPostProcessor等方案

3、動態修改bean信息(BeanFactoryPostProcessor)

上面的例子2就很好的說明了修改bean的信息,在postProcessBeanDefinitionRegistry方法中實現了註冊操作,在postProcessBeanFactory實現了修改bean信息的操作,再例如下面這個例子。

"

分享自己在Java方面的所思所想,希望你看完之後能有更多更深入的瞭解

本人微信公眾號(jwfy的學習分享),歡迎關注~

目錄

1、獲取Spring IOC容器(Aware)

2、動態註冊bean信息(BeanFactoryPostProcessor)

3、動態修改bean信息(BeanFactoryPostProcessor)

4、獲取Spring IOC容器所有bean信息(BeanFactoryPostProcessor)

5、為兼容不同SpringBoot 版本,以實現選擇性加載bean(條件註解)

6、自定義工廠bean實例化(工廠Bean、AbstractFactoryBean)

7、Spring MVC 輸出所有的URL信息(Spring MVC)

8、通過Spring事件機制完成服務啟動後的信息整理(類似於Dubbo的服務暴露機制)

9、通過Spring事件機制獲取HTTP請求調用詳情

10、服務啟動後的初始化任務CommandLineRunner

最後有相關知識點的詳細說明推薦~

1、獲取Spring IOC容器(Aware)

10個Spring&SpringBoot高階用法,你是否都知道?

通過ApplicationContextAware實現,在bean實例化後,經過Aware掃描時,發現實現了ApplicationContextAware接口,就會調用setApplicationContext方法注入ApplicationContext對象,這也是非常經典的一種獲取上下文的方法。

2、動態註冊bean信息(BeanFactoryPostProcessor)

10個Spring&SpringBoot高階用法,你是否都知道?

通過實現BeanDefinitionRegistryPostProcessor接口完成bean的動態注入,而且圖中的動態生成還相比一般的註冊更加複雜,往其中添加了類似於@Value一般的屬性值,儘管我們後續無任何操作,Spring在進行數據填充的時候還是成功的從Properties文件中獲取到了有效數據,這主要依靠的是PropertyPlaceHolderConfigure。

也有更簡單的方法實現bean的動態註冊,例如

((DefaultListableBeanFactory) beanFactory).registerBeanDefinition("school1", beanDefinition)

其實動態註冊bean非常簡單,只需要獲取到當前的IOC容器,然後調用registerBeanDefinition即可,至於獲取當前IOC容器就可以使用Aware、BeanFactoryPostProcessor等方案

3、動態修改bean信息(BeanFactoryPostProcessor)

上面的例子2就很好的說明了修改bean的信息,在postProcessBeanDefinitionRegistry方法中實現了註冊操作,在postProcessBeanFactory實現了修改bean信息的操作,再例如下面這個例子。

10個Spring&SpringBoot高階用法,你是否都知道?

此外可以通過類似於BeanNameAware的獲取到bean的名稱信息等

"

分享自己在Java方面的所思所想,希望你看完之後能有更多更深入的瞭解

本人微信公眾號(jwfy的學習分享),歡迎關注~

目錄

1、獲取Spring IOC容器(Aware)

2、動態註冊bean信息(BeanFactoryPostProcessor)

3、動態修改bean信息(BeanFactoryPostProcessor)

4、獲取Spring IOC容器所有bean信息(BeanFactoryPostProcessor)

5、為兼容不同SpringBoot 版本,以實現選擇性加載bean(條件註解)

6、自定義工廠bean實例化(工廠Bean、AbstractFactoryBean)

7、Spring MVC 輸出所有的URL信息(Spring MVC)

8、通過Spring事件機制完成服務啟動後的信息整理(類似於Dubbo的服務暴露機制)

9、通過Spring事件機制獲取HTTP請求調用詳情

10、服務啟動後的初始化任務CommandLineRunner

最後有相關知識點的詳細說明推薦~

1、獲取Spring IOC容器(Aware)

10個Spring&SpringBoot高階用法,你是否都知道?

通過ApplicationContextAware實現,在bean實例化後,經過Aware掃描時,發現實現了ApplicationContextAware接口,就會調用setApplicationContext方法注入ApplicationContext對象,這也是非常經典的一種獲取上下文的方法。

2、動態註冊bean信息(BeanFactoryPostProcessor)

10個Spring&SpringBoot高階用法,你是否都知道?

通過實現BeanDefinitionRegistryPostProcessor接口完成bean的動態注入,而且圖中的動態生成還相比一般的註冊更加複雜,往其中添加了類似於@Value一般的屬性值,儘管我們後續無任何操作,Spring在進行數據填充的時候還是成功的從Properties文件中獲取到了有效數據,這主要依靠的是PropertyPlaceHolderConfigure。

也有更簡單的方法實現bean的動態註冊,例如

((DefaultListableBeanFactory) beanFactory).registerBeanDefinition("school1", beanDefinition)

其實動態註冊bean非常簡單,只需要獲取到當前的IOC容器,然後調用registerBeanDefinition即可,至於獲取當前IOC容器就可以使用Aware、BeanFactoryPostProcessor等方案

3、動態修改bean信息(BeanFactoryPostProcessor)

上面的例子2就很好的說明了修改bean的信息,在postProcessBeanDefinitionRegistry方法中實現了註冊操作,在postProcessBeanFactory實現了修改bean信息的操作,再例如下面這個例子。

10個Spring&SpringBoot高階用法,你是否都知道?

此外可以通過類似於BeanNameAware的獲取到bean的名稱信息等

10個Spring&SpringBoot高階用法,你是否都知道?

4、獲取Spring IOC容器所有bean信息(BeanFactoryPostProcessor)

"

分享自己在Java方面的所思所想,希望你看完之後能有更多更深入的瞭解

本人微信公眾號(jwfy的學習分享),歡迎關注~

目錄

1、獲取Spring IOC容器(Aware)

2、動態註冊bean信息(BeanFactoryPostProcessor)

3、動態修改bean信息(BeanFactoryPostProcessor)

4、獲取Spring IOC容器所有bean信息(BeanFactoryPostProcessor)

5、為兼容不同SpringBoot 版本,以實現選擇性加載bean(條件註解)

6、自定義工廠bean實例化(工廠Bean、AbstractFactoryBean)

7、Spring MVC 輸出所有的URL信息(Spring MVC)

8、通過Spring事件機制完成服務啟動後的信息整理(類似於Dubbo的服務暴露機制)

9、通過Spring事件機制獲取HTTP請求調用詳情

10、服務啟動後的初始化任務CommandLineRunner

最後有相關知識點的詳細說明推薦~

1、獲取Spring IOC容器(Aware)

10個Spring&SpringBoot高階用法,你是否都知道?

通過ApplicationContextAware實現,在bean實例化後,經過Aware掃描時,發現實現了ApplicationContextAware接口,就會調用setApplicationContext方法注入ApplicationContext對象,這也是非常經典的一種獲取上下文的方法。

2、動態註冊bean信息(BeanFactoryPostProcessor)

10個Spring&SpringBoot高階用法,你是否都知道?

通過實現BeanDefinitionRegistryPostProcessor接口完成bean的動態注入,而且圖中的動態生成還相比一般的註冊更加複雜,往其中添加了類似於@Value一般的屬性值,儘管我們後續無任何操作,Spring在進行數據填充的時候還是成功的從Properties文件中獲取到了有效數據,這主要依靠的是PropertyPlaceHolderConfigure。

也有更簡單的方法實現bean的動態註冊,例如

((DefaultListableBeanFactory) beanFactory).registerBeanDefinition("school1", beanDefinition)

其實動態註冊bean非常簡單,只需要獲取到當前的IOC容器,然後調用registerBeanDefinition即可,至於獲取當前IOC容器就可以使用Aware、BeanFactoryPostProcessor等方案

3、動態修改bean信息(BeanFactoryPostProcessor)

上面的例子2就很好的說明了修改bean的信息,在postProcessBeanDefinitionRegistry方法中實現了註冊操作,在postProcessBeanFactory實現了修改bean信息的操作,再例如下面這個例子。

10個Spring&SpringBoot高階用法,你是否都知道?

此外可以通過類似於BeanNameAware的獲取到bean的名稱信息等

10個Spring&SpringBoot高階用法,你是否都知道?

4、獲取Spring IOC容器所有bean信息(BeanFactoryPostProcessor)

10個Spring&SpringBoot高階用法,你是否都知道?

利用BeanFactoryPostProcessor的postProcessBeanFactory方法,獲得當前的IOC容器,然後遍歷即可。

提問:BeanFactoryPostProcessor 和 BeanPostProcessor的區別在哪裡,一般各自有什麼用途?

5、為兼容不同SpringBoot 版本,以實現選擇性加載bean(條件註解)

"

分享自己在Java方面的所思所想,希望你看完之後能有更多更深入的瞭解

本人微信公眾號(jwfy的學習分享),歡迎關注~

目錄

1、獲取Spring IOC容器(Aware)

2、動態註冊bean信息(BeanFactoryPostProcessor)

3、動態修改bean信息(BeanFactoryPostProcessor)

4、獲取Spring IOC容器所有bean信息(BeanFactoryPostProcessor)

5、為兼容不同SpringBoot 版本,以實現選擇性加載bean(條件註解)

6、自定義工廠bean實例化(工廠Bean、AbstractFactoryBean)

7、Spring MVC 輸出所有的URL信息(Spring MVC)

8、通過Spring事件機制完成服務啟動後的信息整理(類似於Dubbo的服務暴露機制)

9、通過Spring事件機制獲取HTTP請求調用詳情

10、服務啟動後的初始化任務CommandLineRunner

最後有相關知識點的詳細說明推薦~

1、獲取Spring IOC容器(Aware)

10個Spring&SpringBoot高階用法,你是否都知道?

通過ApplicationContextAware實現,在bean實例化後,經過Aware掃描時,發現實現了ApplicationContextAware接口,就會調用setApplicationContext方法注入ApplicationContext對象,這也是非常經典的一種獲取上下文的方法。

2、動態註冊bean信息(BeanFactoryPostProcessor)

10個Spring&SpringBoot高階用法,你是否都知道?

通過實現BeanDefinitionRegistryPostProcessor接口完成bean的動態注入,而且圖中的動態生成還相比一般的註冊更加複雜,往其中添加了類似於@Value一般的屬性值,儘管我們後續無任何操作,Spring在進行數據填充的時候還是成功的從Properties文件中獲取到了有效數據,這主要依靠的是PropertyPlaceHolderConfigure。

也有更簡單的方法實現bean的動態註冊,例如

((DefaultListableBeanFactory) beanFactory).registerBeanDefinition("school1", beanDefinition)

其實動態註冊bean非常簡單,只需要獲取到當前的IOC容器,然後調用registerBeanDefinition即可,至於獲取當前IOC容器就可以使用Aware、BeanFactoryPostProcessor等方案

3、動態修改bean信息(BeanFactoryPostProcessor)

上面的例子2就很好的說明了修改bean的信息,在postProcessBeanDefinitionRegistry方法中實現了註冊操作,在postProcessBeanFactory實現了修改bean信息的操作,再例如下面這個例子。

10個Spring&SpringBoot高階用法,你是否都知道?

此外可以通過類似於BeanNameAware的獲取到bean的名稱信息等

10個Spring&SpringBoot高階用法,你是否都知道?

4、獲取Spring IOC容器所有bean信息(BeanFactoryPostProcessor)

10個Spring&SpringBoot高階用法,你是否都知道?

利用BeanFactoryPostProcessor的postProcessBeanFactory方法,獲得當前的IOC容器,然後遍歷即可。

提問:BeanFactoryPostProcessor 和 BeanPostProcessor的區別在哪裡,一般各自有什麼用途?

5、為兼容不同SpringBoot 版本,以實現選擇性加載bean(條件註解)

10個Spring&SpringBoot高階用法,你是否都知道?

使用了條件註解功能,獲取當前運行的SpringBoot版本進行判斷,類似於系統自帶的條件註解,如下圖

"

分享自己在Java方面的所思所想,希望你看完之後能有更多更深入的瞭解

本人微信公眾號(jwfy的學習分享),歡迎關注~

目錄

1、獲取Spring IOC容器(Aware)

2、動態註冊bean信息(BeanFactoryPostProcessor)

3、動態修改bean信息(BeanFactoryPostProcessor)

4、獲取Spring IOC容器所有bean信息(BeanFactoryPostProcessor)

5、為兼容不同SpringBoot 版本,以實現選擇性加載bean(條件註解)

6、自定義工廠bean實例化(工廠Bean、AbstractFactoryBean)

7、Spring MVC 輸出所有的URL信息(Spring MVC)

8、通過Spring事件機制完成服務啟動後的信息整理(類似於Dubbo的服務暴露機制)

9、通過Spring事件機制獲取HTTP請求調用詳情

10、服務啟動後的初始化任務CommandLineRunner

最後有相關知識點的詳細說明推薦~

1、獲取Spring IOC容器(Aware)

10個Spring&SpringBoot高階用法,你是否都知道?

通過ApplicationContextAware實現,在bean實例化後,經過Aware掃描時,發現實現了ApplicationContextAware接口,就會調用setApplicationContext方法注入ApplicationContext對象,這也是非常經典的一種獲取上下文的方法。

2、動態註冊bean信息(BeanFactoryPostProcessor)

10個Spring&SpringBoot高階用法,你是否都知道?

通過實現BeanDefinitionRegistryPostProcessor接口完成bean的動態注入,而且圖中的動態生成還相比一般的註冊更加複雜,往其中添加了類似於@Value一般的屬性值,儘管我們後續無任何操作,Spring在進行數據填充的時候還是成功的從Properties文件中獲取到了有效數據,這主要依靠的是PropertyPlaceHolderConfigure。

也有更簡單的方法實現bean的動態註冊,例如

((DefaultListableBeanFactory) beanFactory).registerBeanDefinition("school1", beanDefinition)

其實動態註冊bean非常簡單,只需要獲取到當前的IOC容器,然後調用registerBeanDefinition即可,至於獲取當前IOC容器就可以使用Aware、BeanFactoryPostProcessor等方案

3、動態修改bean信息(BeanFactoryPostProcessor)

上面的例子2就很好的說明了修改bean的信息,在postProcessBeanDefinitionRegistry方法中實現了註冊操作,在postProcessBeanFactory實現了修改bean信息的操作,再例如下面這個例子。

10個Spring&SpringBoot高階用法,你是否都知道?

此外可以通過類似於BeanNameAware的獲取到bean的名稱信息等

10個Spring&SpringBoot高階用法,你是否都知道?

4、獲取Spring IOC容器所有bean信息(BeanFactoryPostProcessor)

10個Spring&SpringBoot高階用法,你是否都知道?

利用BeanFactoryPostProcessor的postProcessBeanFactory方法,獲得當前的IOC容器,然後遍歷即可。

提問:BeanFactoryPostProcessor 和 BeanPostProcessor的區別在哪裡,一般各自有什麼用途?

5、為兼容不同SpringBoot 版本,以實現選擇性加載bean(條件註解)

10個Spring&SpringBoot高階用法,你是否都知道?

使用了條件註解功能,獲取當前運行的SpringBoot版本進行判斷,類似於系統自帶的條件註解,如下圖

10個Spring&SpringBoot高階用法,你是否都知道?

主要實現原理得看OnClassCondition類,是不是感覺和@Import類似呢?

拓展:是否清楚Spring 版本升級導致的WebMvcConfigurerAdapter不兼容問題,那麼這個基於當前版本的條件註解功能就能很好的兼容WebMvcConfigurerAdapter問題了。

6、自定義工廠bean實例化(工廠Bean、AbstractFactoryBean)

"

分享自己在Java方面的所思所想,希望你看完之後能有更多更深入的瞭解

本人微信公眾號(jwfy的學習分享),歡迎關注~

目錄

1、獲取Spring IOC容器(Aware)

2、動態註冊bean信息(BeanFactoryPostProcessor)

3、動態修改bean信息(BeanFactoryPostProcessor)

4、獲取Spring IOC容器所有bean信息(BeanFactoryPostProcessor)

5、為兼容不同SpringBoot 版本,以實現選擇性加載bean(條件註解)

6、自定義工廠bean實例化(工廠Bean、AbstractFactoryBean)

7、Spring MVC 輸出所有的URL信息(Spring MVC)

8、通過Spring事件機制完成服務啟動後的信息整理(類似於Dubbo的服務暴露機制)

9、通過Spring事件機制獲取HTTP請求調用詳情

10、服務啟動後的初始化任務CommandLineRunner

最後有相關知識點的詳細說明推薦~

1、獲取Spring IOC容器(Aware)

10個Spring&SpringBoot高階用法,你是否都知道?

通過ApplicationContextAware實現,在bean實例化後,經過Aware掃描時,發現實現了ApplicationContextAware接口,就會調用setApplicationContext方法注入ApplicationContext對象,這也是非常經典的一種獲取上下文的方法。

2、動態註冊bean信息(BeanFactoryPostProcessor)

10個Spring&SpringBoot高階用法,你是否都知道?

通過實現BeanDefinitionRegistryPostProcessor接口完成bean的動態注入,而且圖中的動態生成還相比一般的註冊更加複雜,往其中添加了類似於@Value一般的屬性值,儘管我們後續無任何操作,Spring在進行數據填充的時候還是成功的從Properties文件中獲取到了有效數據,這主要依靠的是PropertyPlaceHolderConfigure。

也有更簡單的方法實現bean的動態註冊,例如

((DefaultListableBeanFactory) beanFactory).registerBeanDefinition("school1", beanDefinition)

其實動態註冊bean非常簡單,只需要獲取到當前的IOC容器,然後調用registerBeanDefinition即可,至於獲取當前IOC容器就可以使用Aware、BeanFactoryPostProcessor等方案

3、動態修改bean信息(BeanFactoryPostProcessor)

上面的例子2就很好的說明了修改bean的信息,在postProcessBeanDefinitionRegistry方法中實現了註冊操作,在postProcessBeanFactory實現了修改bean信息的操作,再例如下面這個例子。

10個Spring&SpringBoot高階用法,你是否都知道?

此外可以通過類似於BeanNameAware的獲取到bean的名稱信息等

10個Spring&SpringBoot高階用法,你是否都知道?

4、獲取Spring IOC容器所有bean信息(BeanFactoryPostProcessor)

10個Spring&SpringBoot高階用法,你是否都知道?

利用BeanFactoryPostProcessor的postProcessBeanFactory方法,獲得當前的IOC容器,然後遍歷即可。

提問:BeanFactoryPostProcessor 和 BeanPostProcessor的區別在哪裡,一般各自有什麼用途?

5、為兼容不同SpringBoot 版本,以實現選擇性加載bean(條件註解)

10個Spring&SpringBoot高階用法,你是否都知道?

使用了條件註解功能,獲取當前運行的SpringBoot版本進行判斷,類似於系統自帶的條件註解,如下圖

10個Spring&SpringBoot高階用法,你是否都知道?

主要實現原理得看OnClassCondition類,是不是感覺和@Import類似呢?

拓展:是否清楚Spring 版本升級導致的WebMvcConfigurerAdapter不兼容問題,那麼這個基於當前版本的條件註解功能就能很好的兼容WebMvcConfigurerAdapter問題了。

6、自定義工廠bean實例化(工廠Bean、AbstractFactoryBean)

10個Spring&SpringBoot高階用法,你是否都知道?

繼承了AbstractFactoryBean抽象類,createInstance是由afterPropertiesSet方法或者getObject方法調用,想獲取具體的Student對象,則需要&區分工廠bean還是包裝bean,具體看下面的圖就應該很清楚了。

"

分享自己在Java方面的所思所想,希望你看完之後能有更多更深入的瞭解

本人微信公眾號(jwfy的學習分享),歡迎關注~

目錄

1、獲取Spring IOC容器(Aware)

2、動態註冊bean信息(BeanFactoryPostProcessor)

3、動態修改bean信息(BeanFactoryPostProcessor)

4、獲取Spring IOC容器所有bean信息(BeanFactoryPostProcessor)

5、為兼容不同SpringBoot 版本,以實現選擇性加載bean(條件註解)

6、自定義工廠bean實例化(工廠Bean、AbstractFactoryBean)

7、Spring MVC 輸出所有的URL信息(Spring MVC)

8、通過Spring事件機制完成服務啟動後的信息整理(類似於Dubbo的服務暴露機制)

9、通過Spring事件機制獲取HTTP請求調用詳情

10、服務啟動後的初始化任務CommandLineRunner

最後有相關知識點的詳細說明推薦~

1、獲取Spring IOC容器(Aware)

10個Spring&SpringBoot高階用法,你是否都知道?

通過ApplicationContextAware實現,在bean實例化後,經過Aware掃描時,發現實現了ApplicationContextAware接口,就會調用setApplicationContext方法注入ApplicationContext對象,這也是非常經典的一種獲取上下文的方法。

2、動態註冊bean信息(BeanFactoryPostProcessor)

10個Spring&SpringBoot高階用法,你是否都知道?

通過實現BeanDefinitionRegistryPostProcessor接口完成bean的動態注入,而且圖中的動態生成還相比一般的註冊更加複雜,往其中添加了類似於@Value一般的屬性值,儘管我們後續無任何操作,Spring在進行數據填充的時候還是成功的從Properties文件中獲取到了有效數據,這主要依靠的是PropertyPlaceHolderConfigure。

也有更簡單的方法實現bean的動態註冊,例如

((DefaultListableBeanFactory) beanFactory).registerBeanDefinition("school1", beanDefinition)

其實動態註冊bean非常簡單,只需要獲取到當前的IOC容器,然後調用registerBeanDefinition即可,至於獲取當前IOC容器就可以使用Aware、BeanFactoryPostProcessor等方案

3、動態修改bean信息(BeanFactoryPostProcessor)

上面的例子2就很好的說明了修改bean的信息,在postProcessBeanDefinitionRegistry方法中實現了註冊操作,在postProcessBeanFactory實現了修改bean信息的操作,再例如下面這個例子。

10個Spring&SpringBoot高階用法,你是否都知道?

此外可以通過類似於BeanNameAware的獲取到bean的名稱信息等

10個Spring&SpringBoot高階用法,你是否都知道?

4、獲取Spring IOC容器所有bean信息(BeanFactoryPostProcessor)

10個Spring&SpringBoot高階用法,你是否都知道?

利用BeanFactoryPostProcessor的postProcessBeanFactory方法,獲得當前的IOC容器,然後遍歷即可。

提問:BeanFactoryPostProcessor 和 BeanPostProcessor的區別在哪裡,一般各自有什麼用途?

5、為兼容不同SpringBoot 版本,以實現選擇性加載bean(條件註解)

10個Spring&SpringBoot高階用法,你是否都知道?

使用了條件註解功能,獲取當前運行的SpringBoot版本進行判斷,類似於系統自帶的條件註解,如下圖

10個Spring&SpringBoot高階用法,你是否都知道?

主要實現原理得看OnClassCondition類,是不是感覺和@Import類似呢?

拓展:是否清楚Spring 版本升級導致的WebMvcConfigurerAdapter不兼容問題,那麼這個基於當前版本的條件註解功能就能很好的兼容WebMvcConfigurerAdapter問題了。

6、自定義工廠bean實例化(工廠Bean、AbstractFactoryBean)

10個Spring&SpringBoot高階用法,你是否都知道?

繼承了AbstractFactoryBean抽象類,createInstance是由afterPropertiesSet方法或者getObject方法調用,想獲取具體的Student對象,則需要&區分工廠bean還是包裝bean,具體看下面的圖就應該很清楚了。

10個Spring&SpringBoot高階用法,你是否都知道?

此外關於afterPropertiesSet方法是InitializingBean類唯一一個方法,一般用來實例化bean之後的自定義修正或者處理初始化後的其他事情。如需對Spring有更深入的理解,下面這個Spring Bean生命週期的流程圖就必須清楚。

"

分享自己在Java方面的所思所想,希望你看完之後能有更多更深入的瞭解

本人微信公眾號(jwfy的學習分享),歡迎關注~

目錄

1、獲取Spring IOC容器(Aware)

2、動態註冊bean信息(BeanFactoryPostProcessor)

3、動態修改bean信息(BeanFactoryPostProcessor)

4、獲取Spring IOC容器所有bean信息(BeanFactoryPostProcessor)

5、為兼容不同SpringBoot 版本,以實現選擇性加載bean(條件註解)

6、自定義工廠bean實例化(工廠Bean、AbstractFactoryBean)

7、Spring MVC 輸出所有的URL信息(Spring MVC)

8、通過Spring事件機制完成服務啟動後的信息整理(類似於Dubbo的服務暴露機制)

9、通過Spring事件機制獲取HTTP請求調用詳情

10、服務啟動後的初始化任務CommandLineRunner

最後有相關知識點的詳細說明推薦~

1、獲取Spring IOC容器(Aware)

10個Spring&SpringBoot高階用法,你是否都知道?

通過ApplicationContextAware實現,在bean實例化後,經過Aware掃描時,發現實現了ApplicationContextAware接口,就會調用setApplicationContext方法注入ApplicationContext對象,這也是非常經典的一種獲取上下文的方法。

2、動態註冊bean信息(BeanFactoryPostProcessor)

10個Spring&SpringBoot高階用法,你是否都知道?

通過實現BeanDefinitionRegistryPostProcessor接口完成bean的動態注入,而且圖中的動態生成還相比一般的註冊更加複雜,往其中添加了類似於@Value一般的屬性值,儘管我們後續無任何操作,Spring在進行數據填充的時候還是成功的從Properties文件中獲取到了有效數據,這主要依靠的是PropertyPlaceHolderConfigure。

也有更簡單的方法實現bean的動態註冊,例如

((DefaultListableBeanFactory) beanFactory).registerBeanDefinition("school1", beanDefinition)

其實動態註冊bean非常簡單,只需要獲取到當前的IOC容器,然後調用registerBeanDefinition即可,至於獲取當前IOC容器就可以使用Aware、BeanFactoryPostProcessor等方案

3、動態修改bean信息(BeanFactoryPostProcessor)

上面的例子2就很好的說明了修改bean的信息,在postProcessBeanDefinitionRegistry方法中實現了註冊操作,在postProcessBeanFactory實現了修改bean信息的操作,再例如下面這個例子。

10個Spring&SpringBoot高階用法,你是否都知道?

此外可以通過類似於BeanNameAware的獲取到bean的名稱信息等

10個Spring&SpringBoot高階用法,你是否都知道?

4、獲取Spring IOC容器所有bean信息(BeanFactoryPostProcessor)

10個Spring&SpringBoot高階用法,你是否都知道?

利用BeanFactoryPostProcessor的postProcessBeanFactory方法,獲得當前的IOC容器,然後遍歷即可。

提問:BeanFactoryPostProcessor 和 BeanPostProcessor的區別在哪裡,一般各自有什麼用途?

5、為兼容不同SpringBoot 版本,以實現選擇性加載bean(條件註解)

10個Spring&SpringBoot高階用法,你是否都知道?

使用了條件註解功能,獲取當前運行的SpringBoot版本進行判斷,類似於系統自帶的條件註解,如下圖

10個Spring&SpringBoot高階用法,你是否都知道?

主要實現原理得看OnClassCondition類,是不是感覺和@Import類似呢?

拓展:是否清楚Spring 版本升級導致的WebMvcConfigurerAdapter不兼容問題,那麼這個基於當前版本的條件註解功能就能很好的兼容WebMvcConfigurerAdapter問題了。

6、自定義工廠bean實例化(工廠Bean、AbstractFactoryBean)

10個Spring&SpringBoot高階用法,你是否都知道?

繼承了AbstractFactoryBean抽象類,createInstance是由afterPropertiesSet方法或者getObject方法調用,想獲取具體的Student對象,則需要&區分工廠bean還是包裝bean,具體看下面的圖就應該很清楚了。

10個Spring&SpringBoot高階用法,你是否都知道?

此外關於afterPropertiesSet方法是InitializingBean類唯一一個方法,一般用來實例化bean之後的自定義修正或者處理初始化後的其他事情。如需對Spring有更深入的理解,下面這個Spring Bean生命週期的流程圖就必須清楚。

10個Spring&SpringBoot高階用法,你是否都知道?

來源自網絡

7、Spring MVC 輸出所有的URL信息(Spring MVC)

"

分享自己在Java方面的所思所想,希望你看完之後能有更多更深入的瞭解

本人微信公眾號(jwfy的學習分享),歡迎關注~

目錄

1、獲取Spring IOC容器(Aware)

2、動態註冊bean信息(BeanFactoryPostProcessor)

3、動態修改bean信息(BeanFactoryPostProcessor)

4、獲取Spring IOC容器所有bean信息(BeanFactoryPostProcessor)

5、為兼容不同SpringBoot 版本,以實現選擇性加載bean(條件註解)

6、自定義工廠bean實例化(工廠Bean、AbstractFactoryBean)

7、Spring MVC 輸出所有的URL信息(Spring MVC)

8、通過Spring事件機制完成服務啟動後的信息整理(類似於Dubbo的服務暴露機制)

9、通過Spring事件機制獲取HTTP請求調用詳情

10、服務啟動後的初始化任務CommandLineRunner

最後有相關知識點的詳細說明推薦~

1、獲取Spring IOC容器(Aware)

10個Spring&SpringBoot高階用法,你是否都知道?

通過ApplicationContextAware實現,在bean實例化後,經過Aware掃描時,發現實現了ApplicationContextAware接口,就會調用setApplicationContext方法注入ApplicationContext對象,這也是非常經典的一種獲取上下文的方法。

2、動態註冊bean信息(BeanFactoryPostProcessor)

10個Spring&SpringBoot高階用法,你是否都知道?

通過實現BeanDefinitionRegistryPostProcessor接口完成bean的動態注入,而且圖中的動態生成還相比一般的註冊更加複雜,往其中添加了類似於@Value一般的屬性值,儘管我們後續無任何操作,Spring在進行數據填充的時候還是成功的從Properties文件中獲取到了有效數據,這主要依靠的是PropertyPlaceHolderConfigure。

也有更簡單的方法實現bean的動態註冊,例如

((DefaultListableBeanFactory) beanFactory).registerBeanDefinition("school1", beanDefinition)

其實動態註冊bean非常簡單,只需要獲取到當前的IOC容器,然後調用registerBeanDefinition即可,至於獲取當前IOC容器就可以使用Aware、BeanFactoryPostProcessor等方案

3、動態修改bean信息(BeanFactoryPostProcessor)

上面的例子2就很好的說明了修改bean的信息,在postProcessBeanDefinitionRegistry方法中實現了註冊操作,在postProcessBeanFactory實現了修改bean信息的操作,再例如下面這個例子。

10個Spring&SpringBoot高階用法,你是否都知道?

此外可以通過類似於BeanNameAware的獲取到bean的名稱信息等

10個Spring&SpringBoot高階用法,你是否都知道?

4、獲取Spring IOC容器所有bean信息(BeanFactoryPostProcessor)

10個Spring&SpringBoot高階用法,你是否都知道?

利用BeanFactoryPostProcessor的postProcessBeanFactory方法,獲得當前的IOC容器,然後遍歷即可。

提問:BeanFactoryPostProcessor 和 BeanPostProcessor的區別在哪裡,一般各自有什麼用途?

5、為兼容不同SpringBoot 版本,以實現選擇性加載bean(條件註解)

10個Spring&SpringBoot高階用法,你是否都知道?

使用了條件註解功能,獲取當前運行的SpringBoot版本進行判斷,類似於系統自帶的條件註解,如下圖

10個Spring&SpringBoot高階用法,你是否都知道?

主要實現原理得看OnClassCondition類,是不是感覺和@Import類似呢?

拓展:是否清楚Spring 版本升級導致的WebMvcConfigurerAdapter不兼容問題,那麼這個基於當前版本的條件註解功能就能很好的兼容WebMvcConfigurerAdapter問題了。

6、自定義工廠bean實例化(工廠Bean、AbstractFactoryBean)

10個Spring&SpringBoot高階用法,你是否都知道?

繼承了AbstractFactoryBean抽象類,createInstance是由afterPropertiesSet方法或者getObject方法調用,想獲取具體的Student對象,則需要&區分工廠bean還是包裝bean,具體看下面的圖就應該很清楚了。

10個Spring&SpringBoot高階用法,你是否都知道?

此外關於afterPropertiesSet方法是InitializingBean類唯一一個方法,一般用來實例化bean之後的自定義修正或者處理初始化後的其他事情。如需對Spring有更深入的理解,下面這個Spring Bean生命週期的流程圖就必須清楚。

10個Spring&SpringBoot高階用法,你是否都知道?

來源自網絡

7、Spring MVC 輸出所有的URL信息(Spring MVC)

10個Spring&SpringBoot高階用法,你是否都知道?

關鍵思想是獲取DispatcherServlet類中的handlerMappings數據,而其數據由主要是從SpringIOC容器中的HandlerMapping類bean,然後分別處理,如圖中圈出來的只有RequestMappingHandlerMapping和BeanNameUrlHandlerMapping,這是不完整的,在Spring 3.2以前是DefaultAnnotationHandlerMapping類,但是已經被廢棄了,這裡就沒有補充,大家在使用的時候需要知道自己Spring的版本

"

分享自己在Java方面的所思所想,希望你看完之後能有更多更深入的瞭解

本人微信公眾號(jwfy的學習分享),歡迎關注~

目錄

1、獲取Spring IOC容器(Aware)

2、動態註冊bean信息(BeanFactoryPostProcessor)

3、動態修改bean信息(BeanFactoryPostProcessor)

4、獲取Spring IOC容器所有bean信息(BeanFactoryPostProcessor)

5、為兼容不同SpringBoot 版本,以實現選擇性加載bean(條件註解)

6、自定義工廠bean實例化(工廠Bean、AbstractFactoryBean)

7、Spring MVC 輸出所有的URL信息(Spring MVC)

8、通過Spring事件機制完成服務啟動後的信息整理(類似於Dubbo的服務暴露機制)

9、通過Spring事件機制獲取HTTP請求調用詳情

10、服務啟動後的初始化任務CommandLineRunner

最後有相關知識點的詳細說明推薦~

1、獲取Spring IOC容器(Aware)

10個Spring&SpringBoot高階用法,你是否都知道?

通過ApplicationContextAware實現,在bean實例化後,經過Aware掃描時,發現實現了ApplicationContextAware接口,就會調用setApplicationContext方法注入ApplicationContext對象,這也是非常經典的一種獲取上下文的方法。

2、動態註冊bean信息(BeanFactoryPostProcessor)

10個Spring&SpringBoot高階用法,你是否都知道?

通過實現BeanDefinitionRegistryPostProcessor接口完成bean的動態注入,而且圖中的動態生成還相比一般的註冊更加複雜,往其中添加了類似於@Value一般的屬性值,儘管我們後續無任何操作,Spring在進行數據填充的時候還是成功的從Properties文件中獲取到了有效數據,這主要依靠的是PropertyPlaceHolderConfigure。

也有更簡單的方法實現bean的動態註冊,例如

((DefaultListableBeanFactory) beanFactory).registerBeanDefinition("school1", beanDefinition)

其實動態註冊bean非常簡單,只需要獲取到當前的IOC容器,然後調用registerBeanDefinition即可,至於獲取當前IOC容器就可以使用Aware、BeanFactoryPostProcessor等方案

3、動態修改bean信息(BeanFactoryPostProcessor)

上面的例子2就很好的說明了修改bean的信息,在postProcessBeanDefinitionRegistry方法中實現了註冊操作,在postProcessBeanFactory實現了修改bean信息的操作,再例如下面這個例子。

10個Spring&SpringBoot高階用法,你是否都知道?

此外可以通過類似於BeanNameAware的獲取到bean的名稱信息等

10個Spring&SpringBoot高階用法,你是否都知道?

4、獲取Spring IOC容器所有bean信息(BeanFactoryPostProcessor)

10個Spring&SpringBoot高階用法,你是否都知道?

利用BeanFactoryPostProcessor的postProcessBeanFactory方法,獲得當前的IOC容器,然後遍歷即可。

提問:BeanFactoryPostProcessor 和 BeanPostProcessor的區別在哪裡,一般各自有什麼用途?

5、為兼容不同SpringBoot 版本,以實現選擇性加載bean(條件註解)

10個Spring&SpringBoot高階用法,你是否都知道?

使用了條件註解功能,獲取當前運行的SpringBoot版本進行判斷,類似於系統自帶的條件註解,如下圖

10個Spring&SpringBoot高階用法,你是否都知道?

主要實現原理得看OnClassCondition類,是不是感覺和@Import類似呢?

拓展:是否清楚Spring 版本升級導致的WebMvcConfigurerAdapter不兼容問題,那麼這個基於當前版本的條件註解功能就能很好的兼容WebMvcConfigurerAdapter問題了。

6、自定義工廠bean實例化(工廠Bean、AbstractFactoryBean)

10個Spring&SpringBoot高階用法,你是否都知道?

繼承了AbstractFactoryBean抽象類,createInstance是由afterPropertiesSet方法或者getObject方法調用,想獲取具體的Student對象,則需要&區分工廠bean還是包裝bean,具體看下面的圖就應該很清楚了。

10個Spring&SpringBoot高階用法,你是否都知道?

此外關於afterPropertiesSet方法是InitializingBean類唯一一個方法,一般用來實例化bean之後的自定義修正或者處理初始化後的其他事情。如需對Spring有更深入的理解,下面這個Spring Bean生命週期的流程圖就必須清楚。

10個Spring&SpringBoot高階用法,你是否都知道?

來源自網絡

7、Spring MVC 輸出所有的URL信息(Spring MVC)

10個Spring&SpringBoot高階用法,你是否都知道?

關鍵思想是獲取DispatcherServlet類中的handlerMappings數據,而其數據由主要是從SpringIOC容器中的HandlerMapping類bean,然後分別處理,如圖中圈出來的只有RequestMappingHandlerMapping和BeanNameUrlHandlerMapping,這是不完整的,在Spring 3.2以前是DefaultAnnotationHandlerMapping類,但是已經被廢棄了,這裡就沒有補充,大家在使用的時候需要知道自己Spring的版本

10個Spring&SpringBoot高階用法,你是否都知道?

如上圖運行結果,可以看到出來,除了業務的url信息,還包含了actuator端點信息以及swagger的url信息。

8、通過Spring事件機制完成服務啟動後的信息整理(類似於Dubbo的服務暴露機制)

"

分享自己在Java方面的所思所想,希望你看完之後能有更多更深入的瞭解

本人微信公眾號(jwfy的學習分享),歡迎關注~

目錄

1、獲取Spring IOC容器(Aware)

2、動態註冊bean信息(BeanFactoryPostProcessor)

3、動態修改bean信息(BeanFactoryPostProcessor)

4、獲取Spring IOC容器所有bean信息(BeanFactoryPostProcessor)

5、為兼容不同SpringBoot 版本,以實現選擇性加載bean(條件註解)

6、自定義工廠bean實例化(工廠Bean、AbstractFactoryBean)

7、Spring MVC 輸出所有的URL信息(Spring MVC)

8、通過Spring事件機制完成服務啟動後的信息整理(類似於Dubbo的服務暴露機制)

9、通過Spring事件機制獲取HTTP請求調用詳情

10、服務啟動後的初始化任務CommandLineRunner

最後有相關知識點的詳細說明推薦~

1、獲取Spring IOC容器(Aware)

10個Spring&SpringBoot高階用法,你是否都知道?

通過ApplicationContextAware實現,在bean實例化後,經過Aware掃描時,發現實現了ApplicationContextAware接口,就會調用setApplicationContext方法注入ApplicationContext對象,這也是非常經典的一種獲取上下文的方法。

2、動態註冊bean信息(BeanFactoryPostProcessor)

10個Spring&SpringBoot高階用法,你是否都知道?

通過實現BeanDefinitionRegistryPostProcessor接口完成bean的動態注入,而且圖中的動態生成還相比一般的註冊更加複雜,往其中添加了類似於@Value一般的屬性值,儘管我們後續無任何操作,Spring在進行數據填充的時候還是成功的從Properties文件中獲取到了有效數據,這主要依靠的是PropertyPlaceHolderConfigure。

也有更簡單的方法實現bean的動態註冊,例如

((DefaultListableBeanFactory) beanFactory).registerBeanDefinition("school1", beanDefinition)

其實動態註冊bean非常簡單,只需要獲取到當前的IOC容器,然後調用registerBeanDefinition即可,至於獲取當前IOC容器就可以使用Aware、BeanFactoryPostProcessor等方案

3、動態修改bean信息(BeanFactoryPostProcessor)

上面的例子2就很好的說明了修改bean的信息,在postProcessBeanDefinitionRegistry方法中實現了註冊操作,在postProcessBeanFactory實現了修改bean信息的操作,再例如下面這個例子。

10個Spring&SpringBoot高階用法,你是否都知道?

此外可以通過類似於BeanNameAware的獲取到bean的名稱信息等

10個Spring&SpringBoot高階用法,你是否都知道?

4、獲取Spring IOC容器所有bean信息(BeanFactoryPostProcessor)

10個Spring&SpringBoot高階用法,你是否都知道?

利用BeanFactoryPostProcessor的postProcessBeanFactory方法,獲得當前的IOC容器,然後遍歷即可。

提問:BeanFactoryPostProcessor 和 BeanPostProcessor的區別在哪裡,一般各自有什麼用途?

5、為兼容不同SpringBoot 版本,以實現選擇性加載bean(條件註解)

10個Spring&SpringBoot高階用法,你是否都知道?

使用了條件註解功能,獲取當前運行的SpringBoot版本進行判斷,類似於系統自帶的條件註解,如下圖

10個Spring&SpringBoot高階用法,你是否都知道?

主要實現原理得看OnClassCondition類,是不是感覺和@Import類似呢?

拓展:是否清楚Spring 版本升級導致的WebMvcConfigurerAdapter不兼容問題,那麼這個基於當前版本的條件註解功能就能很好的兼容WebMvcConfigurerAdapter問題了。

6、自定義工廠bean實例化(工廠Bean、AbstractFactoryBean)

10個Spring&SpringBoot高階用法,你是否都知道?

繼承了AbstractFactoryBean抽象類,createInstance是由afterPropertiesSet方法或者getObject方法調用,想獲取具體的Student對象,則需要&區分工廠bean還是包裝bean,具體看下面的圖就應該很清楚了。

10個Spring&SpringBoot高階用法,你是否都知道?

此外關於afterPropertiesSet方法是InitializingBean類唯一一個方法,一般用來實例化bean之後的自定義修正或者處理初始化後的其他事情。如需對Spring有更深入的理解,下面這個Spring Bean生命週期的流程圖就必須清楚。

10個Spring&SpringBoot高階用法,你是否都知道?

來源自網絡

7、Spring MVC 輸出所有的URL信息(Spring MVC)

10個Spring&SpringBoot高階用法,你是否都知道?

關鍵思想是獲取DispatcherServlet類中的handlerMappings數據,而其數據由主要是從SpringIOC容器中的HandlerMapping類bean,然後分別處理,如圖中圈出來的只有RequestMappingHandlerMapping和BeanNameUrlHandlerMapping,這是不完整的,在Spring 3.2以前是DefaultAnnotationHandlerMapping類,但是已經被廢棄了,這裡就沒有補充,大家在使用的時候需要知道自己Spring的版本

10個Spring&SpringBoot高階用法,你是否都知道?

如上圖運行結果,可以看到出來,除了業務的url信息,還包含了actuator端點信息以及swagger的url信息。

8、通過Spring事件機制完成服務啟動後的信息整理(類似於Dubbo的服務暴露機制)

10個Spring&SpringBoot高階用法,你是否都知道?

使用了Spring 監聽機制去監聽ContextRefreshedEvent這類Spring IOC容器刷新完成之後的事件觸發,本demo並沒有做什麼事情,但是結合具體業務可以做很多想做的事情,可以看看Dubbo的服務暴露接口繼承關係,如下圖。

"

分享自己在Java方面的所思所想,希望你看完之後能有更多更深入的瞭解

本人微信公眾號(jwfy的學習分享),歡迎關注~

目錄

1、獲取Spring IOC容器(Aware)

2、動態註冊bean信息(BeanFactoryPostProcessor)

3、動態修改bean信息(BeanFactoryPostProcessor)

4、獲取Spring IOC容器所有bean信息(BeanFactoryPostProcessor)

5、為兼容不同SpringBoot 版本,以實現選擇性加載bean(條件註解)

6、自定義工廠bean實例化(工廠Bean、AbstractFactoryBean)

7、Spring MVC 輸出所有的URL信息(Spring MVC)

8、通過Spring事件機制完成服務啟動後的信息整理(類似於Dubbo的服務暴露機制)

9、通過Spring事件機制獲取HTTP請求調用詳情

10、服務啟動後的初始化任務CommandLineRunner

最後有相關知識點的詳細說明推薦~

1、獲取Spring IOC容器(Aware)

10個Spring&SpringBoot高階用法,你是否都知道?

通過ApplicationContextAware實現,在bean實例化後,經過Aware掃描時,發現實現了ApplicationContextAware接口,就會調用setApplicationContext方法注入ApplicationContext對象,這也是非常經典的一種獲取上下文的方法。

2、動態註冊bean信息(BeanFactoryPostProcessor)

10個Spring&SpringBoot高階用法,你是否都知道?

通過實現BeanDefinitionRegistryPostProcessor接口完成bean的動態注入,而且圖中的動態生成還相比一般的註冊更加複雜,往其中添加了類似於@Value一般的屬性值,儘管我們後續無任何操作,Spring在進行數據填充的時候還是成功的從Properties文件中獲取到了有效數據,這主要依靠的是PropertyPlaceHolderConfigure。

也有更簡單的方法實現bean的動態註冊,例如

((DefaultListableBeanFactory) beanFactory).registerBeanDefinition("school1", beanDefinition)

其實動態註冊bean非常簡單,只需要獲取到當前的IOC容器,然後調用registerBeanDefinition即可,至於獲取當前IOC容器就可以使用Aware、BeanFactoryPostProcessor等方案

3、動態修改bean信息(BeanFactoryPostProcessor)

上面的例子2就很好的說明了修改bean的信息,在postProcessBeanDefinitionRegistry方法中實現了註冊操作,在postProcessBeanFactory實現了修改bean信息的操作,再例如下面這個例子。

10個Spring&SpringBoot高階用法,你是否都知道?

此外可以通過類似於BeanNameAware的獲取到bean的名稱信息等

10個Spring&SpringBoot高階用法,你是否都知道?

4、獲取Spring IOC容器所有bean信息(BeanFactoryPostProcessor)

10個Spring&SpringBoot高階用法,你是否都知道?

利用BeanFactoryPostProcessor的postProcessBeanFactory方法,獲得當前的IOC容器,然後遍歷即可。

提問:BeanFactoryPostProcessor 和 BeanPostProcessor的區別在哪裡,一般各自有什麼用途?

5、為兼容不同SpringBoot 版本,以實現選擇性加載bean(條件註解)

10個Spring&SpringBoot高階用法,你是否都知道?

使用了條件註解功能,獲取當前運行的SpringBoot版本進行判斷,類似於系統自帶的條件註解,如下圖

10個Spring&SpringBoot高階用法,你是否都知道?

主要實現原理得看OnClassCondition類,是不是感覺和@Import類似呢?

拓展:是否清楚Spring 版本升級導致的WebMvcConfigurerAdapter不兼容問題,那麼這個基於當前版本的條件註解功能就能很好的兼容WebMvcConfigurerAdapter問題了。

6、自定義工廠bean實例化(工廠Bean、AbstractFactoryBean)

10個Spring&SpringBoot高階用法,你是否都知道?

繼承了AbstractFactoryBean抽象類,createInstance是由afterPropertiesSet方法或者getObject方法調用,想獲取具體的Student對象,則需要&區分工廠bean還是包裝bean,具體看下面的圖就應該很清楚了。

10個Spring&SpringBoot高階用法,你是否都知道?

此外關於afterPropertiesSet方法是InitializingBean類唯一一個方法,一般用來實例化bean之後的自定義修正或者處理初始化後的其他事情。如需對Spring有更深入的理解,下面這個Spring Bean生命週期的流程圖就必須清楚。

10個Spring&SpringBoot高階用法,你是否都知道?

來源自網絡

7、Spring MVC 輸出所有的URL信息(Spring MVC)

10個Spring&SpringBoot高階用法,你是否都知道?

關鍵思想是獲取DispatcherServlet類中的handlerMappings數據,而其數據由主要是從SpringIOC容器中的HandlerMapping類bean,然後分別處理,如圖中圈出來的只有RequestMappingHandlerMapping和BeanNameUrlHandlerMapping,這是不完整的,在Spring 3.2以前是DefaultAnnotationHandlerMapping類,但是已經被廢棄了,這裡就沒有補充,大家在使用的時候需要知道自己Spring的版本

10個Spring&SpringBoot高階用法,你是否都知道?

如上圖運行結果,可以看到出來,除了業務的url信息,還包含了actuator端點信息以及swagger的url信息。

8、通過Spring事件機制完成服務啟動後的信息整理(類似於Dubbo的服務暴露機制)

10個Spring&SpringBoot高階用法,你是否都知道?

使用了Spring 監聽機制去監聽ContextRefreshedEvent這類Spring IOC容器刷新完成之後的事件觸發,本demo並沒有做什麼事情,但是結合具體業務可以做很多想做的事情,可以看看Dubbo的服務暴露接口繼承關係,如下圖。

10個Spring&SpringBoot高階用法,你是否都知道?

本圖來自本人簡書文章截圖:https://www.jianshu.com/p/507d51bf14ce如下圖是dubbo的源碼,充分利用了監聽機制,監聽ContextRefreshedEvent事件,最後調用export方法完成服務暴露操作。

"

分享自己在Java方面的所思所想,希望你看完之後能有更多更深入的瞭解

本人微信公眾號(jwfy的學習分享),歡迎關注~

目錄

1、獲取Spring IOC容器(Aware)

2、動態註冊bean信息(BeanFactoryPostProcessor)

3、動態修改bean信息(BeanFactoryPostProcessor)

4、獲取Spring IOC容器所有bean信息(BeanFactoryPostProcessor)

5、為兼容不同SpringBoot 版本,以實現選擇性加載bean(條件註解)

6、自定義工廠bean實例化(工廠Bean、AbstractFactoryBean)

7、Spring MVC 輸出所有的URL信息(Spring MVC)

8、通過Spring事件機制完成服務啟動後的信息整理(類似於Dubbo的服務暴露機制)

9、通過Spring事件機制獲取HTTP請求調用詳情

10、服務啟動後的初始化任務CommandLineRunner

最後有相關知識點的詳細說明推薦~

1、獲取Spring IOC容器(Aware)

10個Spring&SpringBoot高階用法,你是否都知道?

通過ApplicationContextAware實現,在bean實例化後,經過Aware掃描時,發現實現了ApplicationContextAware接口,就會調用setApplicationContext方法注入ApplicationContext對象,這也是非常經典的一種獲取上下文的方法。

2、動態註冊bean信息(BeanFactoryPostProcessor)

10個Spring&SpringBoot高階用法,你是否都知道?

通過實現BeanDefinitionRegistryPostProcessor接口完成bean的動態注入,而且圖中的動態生成還相比一般的註冊更加複雜,往其中添加了類似於@Value一般的屬性值,儘管我們後續無任何操作,Spring在進行數據填充的時候還是成功的從Properties文件中獲取到了有效數據,這主要依靠的是PropertyPlaceHolderConfigure。

也有更簡單的方法實現bean的動態註冊,例如

((DefaultListableBeanFactory) beanFactory).registerBeanDefinition("school1", beanDefinition)

其實動態註冊bean非常簡單,只需要獲取到當前的IOC容器,然後調用registerBeanDefinition即可,至於獲取當前IOC容器就可以使用Aware、BeanFactoryPostProcessor等方案

3、動態修改bean信息(BeanFactoryPostProcessor)

上面的例子2就很好的說明了修改bean的信息,在postProcessBeanDefinitionRegistry方法中實現了註冊操作,在postProcessBeanFactory實現了修改bean信息的操作,再例如下面這個例子。

10個Spring&SpringBoot高階用法,你是否都知道?

此外可以通過類似於BeanNameAware的獲取到bean的名稱信息等

10個Spring&SpringBoot高階用法,你是否都知道?

4、獲取Spring IOC容器所有bean信息(BeanFactoryPostProcessor)

10個Spring&SpringBoot高階用法,你是否都知道?

利用BeanFactoryPostProcessor的postProcessBeanFactory方法,獲得當前的IOC容器,然後遍歷即可。

提問:BeanFactoryPostProcessor 和 BeanPostProcessor的區別在哪裡,一般各自有什麼用途?

5、為兼容不同SpringBoot 版本,以實現選擇性加載bean(條件註解)

10個Spring&SpringBoot高階用法,你是否都知道?

使用了條件註解功能,獲取當前運行的SpringBoot版本進行判斷,類似於系統自帶的條件註解,如下圖

10個Spring&SpringBoot高階用法,你是否都知道?

主要實現原理得看OnClassCondition類,是不是感覺和@Import類似呢?

拓展:是否清楚Spring 版本升級導致的WebMvcConfigurerAdapter不兼容問題,那麼這個基於當前版本的條件註解功能就能很好的兼容WebMvcConfigurerAdapter問題了。

6、自定義工廠bean實例化(工廠Bean、AbstractFactoryBean)

10個Spring&SpringBoot高階用法,你是否都知道?

繼承了AbstractFactoryBean抽象類,createInstance是由afterPropertiesSet方法或者getObject方法調用,想獲取具體的Student對象,則需要&區分工廠bean還是包裝bean,具體看下面的圖就應該很清楚了。

10個Spring&SpringBoot高階用法,你是否都知道?

此外關於afterPropertiesSet方法是InitializingBean類唯一一個方法,一般用來實例化bean之後的自定義修正或者處理初始化後的其他事情。如需對Spring有更深入的理解,下面這個Spring Bean生命週期的流程圖就必須清楚。

10個Spring&SpringBoot高階用法,你是否都知道?

來源自網絡

7、Spring MVC 輸出所有的URL信息(Spring MVC)

10個Spring&SpringBoot高階用法,你是否都知道?

關鍵思想是獲取DispatcherServlet類中的handlerMappings數據,而其數據由主要是從SpringIOC容器中的HandlerMapping類bean,然後分別處理,如圖中圈出來的只有RequestMappingHandlerMapping和BeanNameUrlHandlerMapping,這是不完整的,在Spring 3.2以前是DefaultAnnotationHandlerMapping類,但是已經被廢棄了,這裡就沒有補充,大家在使用的時候需要知道自己Spring的版本

10個Spring&SpringBoot高階用法,你是否都知道?

如上圖運行結果,可以看到出來,除了業務的url信息,還包含了actuator端點信息以及swagger的url信息。

8、通過Spring事件機制完成服務啟動後的信息整理(類似於Dubbo的服務暴露機制)

10個Spring&SpringBoot高階用法,你是否都知道?

使用了Spring 監聽機制去監聽ContextRefreshedEvent這類Spring IOC容器刷新完成之後的事件觸發,本demo並沒有做什麼事情,但是結合具體業務可以做很多想做的事情,可以看看Dubbo的服務暴露接口繼承關係,如下圖。

10個Spring&SpringBoot高階用法,你是否都知道?

本圖來自本人簡書文章截圖:https://www.jianshu.com/p/507d51bf14ce如下圖是dubbo的源碼,充分利用了監聽機制,監聽ContextRefreshedEvent事件,最後調用export方法完成服務暴露操作。

10個Spring&SpringBoot高階用法,你是否都知道?

如果去了解Swagger的工作原理會發現也是類似

拓展:RPC服務結合Spring中,服務暴露大體上都是依靠事件監聽機制完成的

9、通過Spring事件機制獲取HTTP請求調用詳情

"

分享自己在Java方面的所思所想,希望你看完之後能有更多更深入的瞭解

本人微信公眾號(jwfy的學習分享),歡迎關注~

目錄

1、獲取Spring IOC容器(Aware)

2、動態註冊bean信息(BeanFactoryPostProcessor)

3、動態修改bean信息(BeanFactoryPostProcessor)

4、獲取Spring IOC容器所有bean信息(BeanFactoryPostProcessor)

5、為兼容不同SpringBoot 版本,以實現選擇性加載bean(條件註解)

6、自定義工廠bean實例化(工廠Bean、AbstractFactoryBean)

7、Spring MVC 輸出所有的URL信息(Spring MVC)

8、通過Spring事件機制完成服務啟動後的信息整理(類似於Dubbo的服務暴露機制)

9、通過Spring事件機制獲取HTTP請求調用詳情

10、服務啟動後的初始化任務CommandLineRunner

最後有相關知識點的詳細說明推薦~

1、獲取Spring IOC容器(Aware)

10個Spring&SpringBoot高階用法,你是否都知道?

通過ApplicationContextAware實現,在bean實例化後,經過Aware掃描時,發現實現了ApplicationContextAware接口,就會調用setApplicationContext方法注入ApplicationContext對象,這也是非常經典的一種獲取上下文的方法。

2、動態註冊bean信息(BeanFactoryPostProcessor)

10個Spring&SpringBoot高階用法,你是否都知道?

通過實現BeanDefinitionRegistryPostProcessor接口完成bean的動態注入,而且圖中的動態生成還相比一般的註冊更加複雜,往其中添加了類似於@Value一般的屬性值,儘管我們後續無任何操作,Spring在進行數據填充的時候還是成功的從Properties文件中獲取到了有效數據,這主要依靠的是PropertyPlaceHolderConfigure。

也有更簡單的方法實現bean的動態註冊,例如

((DefaultListableBeanFactory) beanFactory).registerBeanDefinition("school1", beanDefinition)

其實動態註冊bean非常簡單,只需要獲取到當前的IOC容器,然後調用registerBeanDefinition即可,至於獲取當前IOC容器就可以使用Aware、BeanFactoryPostProcessor等方案

3、動態修改bean信息(BeanFactoryPostProcessor)

上面的例子2就很好的說明了修改bean的信息,在postProcessBeanDefinitionRegistry方法中實現了註冊操作,在postProcessBeanFactory實現了修改bean信息的操作,再例如下面這個例子。

10個Spring&SpringBoot高階用法,你是否都知道?

此外可以通過類似於BeanNameAware的獲取到bean的名稱信息等

10個Spring&SpringBoot高階用法,你是否都知道?

4、獲取Spring IOC容器所有bean信息(BeanFactoryPostProcessor)

10個Spring&SpringBoot高階用法,你是否都知道?

利用BeanFactoryPostProcessor的postProcessBeanFactory方法,獲得當前的IOC容器,然後遍歷即可。

提問:BeanFactoryPostProcessor 和 BeanPostProcessor的區別在哪裡,一般各自有什麼用途?

5、為兼容不同SpringBoot 版本,以實現選擇性加載bean(條件註解)

10個Spring&SpringBoot高階用法,你是否都知道?

使用了條件註解功能,獲取當前運行的SpringBoot版本進行判斷,類似於系統自帶的條件註解,如下圖

10個Spring&SpringBoot高階用法,你是否都知道?

主要實現原理得看OnClassCondition類,是不是感覺和@Import類似呢?

拓展:是否清楚Spring 版本升級導致的WebMvcConfigurerAdapter不兼容問題,那麼這個基於當前版本的條件註解功能就能很好的兼容WebMvcConfigurerAdapter問題了。

6、自定義工廠bean實例化(工廠Bean、AbstractFactoryBean)

10個Spring&SpringBoot高階用法,你是否都知道?

繼承了AbstractFactoryBean抽象類,createInstance是由afterPropertiesSet方法或者getObject方法調用,想獲取具體的Student對象,則需要&區分工廠bean還是包裝bean,具體看下面的圖就應該很清楚了。

10個Spring&SpringBoot高階用法,你是否都知道?

此外關於afterPropertiesSet方法是InitializingBean類唯一一個方法,一般用來實例化bean之後的自定義修正或者處理初始化後的其他事情。如需對Spring有更深入的理解,下面這個Spring Bean生命週期的流程圖就必須清楚。

10個Spring&SpringBoot高階用法,你是否都知道?

來源自網絡

7、Spring MVC 輸出所有的URL信息(Spring MVC)

10個Spring&SpringBoot高階用法,你是否都知道?

關鍵思想是獲取DispatcherServlet類中的handlerMappings數據,而其數據由主要是從SpringIOC容器中的HandlerMapping類bean,然後分別處理,如圖中圈出來的只有RequestMappingHandlerMapping和BeanNameUrlHandlerMapping,這是不完整的,在Spring 3.2以前是DefaultAnnotationHandlerMapping類,但是已經被廢棄了,這裡就沒有補充,大家在使用的時候需要知道自己Spring的版本

10個Spring&SpringBoot高階用法,你是否都知道?

如上圖運行結果,可以看到出來,除了業務的url信息,還包含了actuator端點信息以及swagger的url信息。

8、通過Spring事件機制完成服務啟動後的信息整理(類似於Dubbo的服務暴露機制)

10個Spring&SpringBoot高階用法,你是否都知道?

使用了Spring 監聽機制去監聽ContextRefreshedEvent這類Spring IOC容器刷新完成之後的事件觸發,本demo並沒有做什麼事情,但是結合具體業務可以做很多想做的事情,可以看看Dubbo的服務暴露接口繼承關係,如下圖。

10個Spring&SpringBoot高階用法,你是否都知道?

本圖來自本人簡書文章截圖:https://www.jianshu.com/p/507d51bf14ce如下圖是dubbo的源碼,充分利用了監聽機制,監聽ContextRefreshedEvent事件,最後調用export方法完成服務暴露操作。

10個Spring&SpringBoot高階用法,你是否都知道?

如果去了解Swagger的工作原理會發現也是類似

拓展:RPC服務結合Spring中,服務暴露大體上都是依靠事件監聽機制完成的

9、通過Spring事件機制獲取HTTP請求調用詳情

10個Spring&SpringBoot高階用法,你是否都知道?

在本地測試統計http服務調用統計情況,還是很方便的,依靠的是ServletRequestHandledEvent事件,默認這個事件是開啟的,如果未開啟該事件,就會導致事件監聽無效。

10、服務啟動後的初始化任務CommandLineRunner

這個就不再介紹了,相信大家也按照上述的原理分析和學習這個工具的使用。整體的思路也是類似的。

總結

上面幾個功能點說來說去就是Aware、BeanPostProcessor、BeanFactoryPostProcessor、Event,而且大家如果仔細分析springboot的源碼會發現,其實整體的Spring框架並沒有太多的改進,而是依賴上述的幾種鉤子延伸和拓展,單獨一個BeanPostProcessor就延伸出了多少種子類,再加上Order排序,就可以非常方便的拓展功能。

問題:如何實現動態路由註冊(沒有明確的Controller層定義)

最後分享一張網上看到的Spring的執行流程圖解,寫的確實很詳細,如果希望對Spring源碼有更多深入的瞭解,可以好好思考和學習~


"

分享自己在Java方面的所思所想,希望你看完之後能有更多更深入的瞭解

本人微信公眾號(jwfy的學習分享),歡迎關注~

目錄

1、獲取Spring IOC容器(Aware)

2、動態註冊bean信息(BeanFactoryPostProcessor)

3、動態修改bean信息(BeanFactoryPostProcessor)

4、獲取Spring IOC容器所有bean信息(BeanFactoryPostProcessor)

5、為兼容不同SpringBoot 版本,以實現選擇性加載bean(條件註解)

6、自定義工廠bean實例化(工廠Bean、AbstractFactoryBean)

7、Spring MVC 輸出所有的URL信息(Spring MVC)

8、通過Spring事件機制完成服務啟動後的信息整理(類似於Dubbo的服務暴露機制)

9、通過Spring事件機制獲取HTTP請求調用詳情

10、服務啟動後的初始化任務CommandLineRunner

最後有相關知識點的詳細說明推薦~

1、獲取Spring IOC容器(Aware)

10個Spring&SpringBoot高階用法,你是否都知道?

通過ApplicationContextAware實現,在bean實例化後,經過Aware掃描時,發現實現了ApplicationContextAware接口,就會調用setApplicationContext方法注入ApplicationContext對象,這也是非常經典的一種獲取上下文的方法。

2、動態註冊bean信息(BeanFactoryPostProcessor)

10個Spring&SpringBoot高階用法,你是否都知道?

通過實現BeanDefinitionRegistryPostProcessor接口完成bean的動態注入,而且圖中的動態生成還相比一般的註冊更加複雜,往其中添加了類似於@Value一般的屬性值,儘管我們後續無任何操作,Spring在進行數據填充的時候還是成功的從Properties文件中獲取到了有效數據,這主要依靠的是PropertyPlaceHolderConfigure。

也有更簡單的方法實現bean的動態註冊,例如

((DefaultListableBeanFactory) beanFactory).registerBeanDefinition("school1", beanDefinition)

其實動態註冊bean非常簡單,只需要獲取到當前的IOC容器,然後調用registerBeanDefinition即可,至於獲取當前IOC容器就可以使用Aware、BeanFactoryPostProcessor等方案

3、動態修改bean信息(BeanFactoryPostProcessor)

上面的例子2就很好的說明了修改bean的信息,在postProcessBeanDefinitionRegistry方法中實現了註冊操作,在postProcessBeanFactory實現了修改bean信息的操作,再例如下面這個例子。

10個Spring&SpringBoot高階用法,你是否都知道?

此外可以通過類似於BeanNameAware的獲取到bean的名稱信息等

10個Spring&SpringBoot高階用法,你是否都知道?

4、獲取Spring IOC容器所有bean信息(BeanFactoryPostProcessor)

10個Spring&SpringBoot高階用法,你是否都知道?

利用BeanFactoryPostProcessor的postProcessBeanFactory方法,獲得當前的IOC容器,然後遍歷即可。

提問:BeanFactoryPostProcessor 和 BeanPostProcessor的區別在哪裡,一般各自有什麼用途?

5、為兼容不同SpringBoot 版本,以實現選擇性加載bean(條件註解)

10個Spring&SpringBoot高階用法,你是否都知道?

使用了條件註解功能,獲取當前運行的SpringBoot版本進行判斷,類似於系統自帶的條件註解,如下圖

10個Spring&SpringBoot高階用法,你是否都知道?

主要實現原理得看OnClassCondition類,是不是感覺和@Import類似呢?

拓展:是否清楚Spring 版本升級導致的WebMvcConfigurerAdapter不兼容問題,那麼這個基於當前版本的條件註解功能就能很好的兼容WebMvcConfigurerAdapter問題了。

6、自定義工廠bean實例化(工廠Bean、AbstractFactoryBean)

10個Spring&SpringBoot高階用法,你是否都知道?

繼承了AbstractFactoryBean抽象類,createInstance是由afterPropertiesSet方法或者getObject方法調用,想獲取具體的Student對象,則需要&區分工廠bean還是包裝bean,具體看下面的圖就應該很清楚了。

10個Spring&SpringBoot高階用法,你是否都知道?

此外關於afterPropertiesSet方法是InitializingBean類唯一一個方法,一般用來實例化bean之後的自定義修正或者處理初始化後的其他事情。如需對Spring有更深入的理解,下面這個Spring Bean生命週期的流程圖就必須清楚。

10個Spring&SpringBoot高階用法,你是否都知道?

來源自網絡

7、Spring MVC 輸出所有的URL信息(Spring MVC)

10個Spring&SpringBoot高階用法,你是否都知道?

關鍵思想是獲取DispatcherServlet類中的handlerMappings數據,而其數據由主要是從SpringIOC容器中的HandlerMapping類bean,然後分別處理,如圖中圈出來的只有RequestMappingHandlerMapping和BeanNameUrlHandlerMapping,這是不完整的,在Spring 3.2以前是DefaultAnnotationHandlerMapping類,但是已經被廢棄了,這裡就沒有補充,大家在使用的時候需要知道自己Spring的版本

10個Spring&SpringBoot高階用法,你是否都知道?

如上圖運行結果,可以看到出來,除了業務的url信息,還包含了actuator端點信息以及swagger的url信息。

8、通過Spring事件機制完成服務啟動後的信息整理(類似於Dubbo的服務暴露機制)

10個Spring&SpringBoot高階用法,你是否都知道?

使用了Spring 監聽機制去監聽ContextRefreshedEvent這類Spring IOC容器刷新完成之後的事件觸發,本demo並沒有做什麼事情,但是結合具體業務可以做很多想做的事情,可以看看Dubbo的服務暴露接口繼承關係,如下圖。

10個Spring&SpringBoot高階用法,你是否都知道?

本圖來自本人簡書文章截圖:https://www.jianshu.com/p/507d51bf14ce如下圖是dubbo的源碼,充分利用了監聽機制,監聽ContextRefreshedEvent事件,最後調用export方法完成服務暴露操作。

10個Spring&SpringBoot高階用法,你是否都知道?

如果去了解Swagger的工作原理會發現也是類似

拓展:RPC服務結合Spring中,服務暴露大體上都是依靠事件監聽機制完成的

9、通過Spring事件機制獲取HTTP請求調用詳情

10個Spring&SpringBoot高階用法,你是否都知道?

在本地測試統計http服務調用統計情況,還是很方便的,依靠的是ServletRequestHandledEvent事件,默認這個事件是開啟的,如果未開啟該事件,就會導致事件監聽無效。

10、服務啟動後的初始化任務CommandLineRunner

這個就不再介紹了,相信大家也按照上述的原理分析和學習這個工具的使用。整體的思路也是類似的。

總結

上面幾個功能點說來說去就是Aware、BeanPostProcessor、BeanFactoryPostProcessor、Event,而且大家如果仔細分析springboot的源碼會發現,其實整體的Spring框架並沒有太多的改進,而是依賴上述的幾種鉤子延伸和拓展,單獨一個BeanPostProcessor就延伸出了多少種子類,再加上Order排序,就可以非常方便的拓展功能。

問題:如何實現動態路由註冊(沒有明確的Controller層定義)

最後分享一張網上看到的Spring的執行流程圖解,寫的確實很詳細,如果希望對Spring源碼有更多深入的瞭解,可以好好思考和學習~


10個Spring&SpringBoot高階用法,你是否都知道?


原創推薦

「系列教程」手寫RPC框架(1),看看100個線程同時調用情況如何

「面試」new String("abc")和"abc"有什麼區別?反編譯看看原理吧

面試:你是否瞭解Spring BeanPostProcessor的原理和具體使用場景

「Spring源碼」XML解析BeanDefinition原理學習

從Tomcat入口瞭解Spring MVC的請求處理流程

「Spring源碼」深入學習事件通知機制

"

相關推薦

推薦中...