javascript
【SpringBoot】在普通类中获取spring容器中的bean
這段時間公司搞封閉開發,做一個聯通總部的客服系統項目,是基于springboot的。在開發工程中遇到一個頁面datagrid數據排序的功能,因為有多個表的數據都要用到排序功能,于是我就寫了一個排序功能的公共實現類,方便大家使用。在寫實現類的過程中學習了在普通類中獲取spring容器中的bean的方法。
如果我們需要在一個類中使用spring提供的bean對象,那么我們需要把這個bean注入到spring容器中,交給spring容器來管理。但是在實際應用中我們往往會碰到在普通的java類中,需要直接使用spring提供的對象或者說有一些對象不需要交給spring容器來管理,但是需要用到spring容器中的一些對象。
如果這是spring框架的獨立應用程序,我們通過ApplicationContext對象即可獲取到:
ApplicationContext applicationContext = new FileSystemXmlApplicationContext("applicationContext.xml"); applicationContext.getBean("beanId");但是在實際應用中,我們做的項目大多是web application,在web application中我們啟動spring容器是通過在web.xml中進行配置,這樣就不適合使用上面的方式在普通類去獲取對象了,因為這樣做就相當于加載了兩次spring容器,而我們想是否可以通過在啟動web服務器的時候,就把Application放在某一個類中,我們通過這個類在獲取,這樣就可以在普通類獲取spring bean對象了。
在springboot中有一種實現方式,可以很方便的獲取到ApplicationContext對象:SpringBoot平臺下采用ApplicationContextAware的方式完成ApplicationContext實例的獲取,并通過ApplicationContext實例完成對Spring管理的Bean實例手動獲取。
創建一個實體類SpringUtil并實現ApplicationContextAware接口,重寫接口內的setApplicationContext方法來完成獲取ApplicationContext實例的方法。
如下為ApplicationContextAware接口:
具體實現請參見我的Github:SpringBoot在普通類中獲取spring容器中的bean
注意兩個地方:
1、SpringUtil類上的 @Component注解必須要有,否則spring就不會自動調用setApplicationContext方法來為我們設置上下文實例;
2、SpringUtil類要在springboot可以掃描到的包下;
總結
以上是生活随笔為你收集整理的【SpringBoot】在普通类中获取spring容器中的bean的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【JDK源码】java.util.con
- 下一篇: 【java reflection】反射工