javascript
怎么随时获取Spring的上下文ApplicaitonContext,和Spring管理的Bean
BeanFactory接口
Interface BeanFactory
getBean
<T> T getBean(String?name,Class<T>?requiredType)throws BeansException上面是Apring的bean工廠的接口(顧名思議 拿到Spring的Bean) 下面看它的一個(gè)實(shí)現(xiàn)類
ClassPathXmlApplicationContext(BeanFactory接口的一個(gè)實(shí)現(xiàn)類)
public ClassPathXmlApplicationContext(String?configLocation)throws BeansException上面只是通過API說了Spring獲取Bean的原理,然而工作中:
在平時(shí)代碼中 我們都是通過?@Autowired 來引入一個(gè)對象。也就是Spring的依賴注入。
不過使用依賴注入需要滿足兩個(gè)條件,注入類 和被注入類 都需要交給Spring去管理,也就是需要在Spring中配置Bean
但是開發(fā)中,有些工具類(或者實(shí)體類)是不需要在Spring中配置的,如果工具類里面 想引用Spring配置的Bean 應(yīng)該怎么辦
解決辦法
自己用的時(shí)候主動(dòng)去new。 不可取 自己new的類 沒有交給Spring去管理,如果類中 用到了Spring的一些注解功能 完全失效??
也不可能像上面API中 去通過XML拿(IO操作很費(fèi)時(shí)間)
工作中使用ApplicationContextAware接口
先通過setApplicationContext獲取Spring的上下文
在通過applicationContext去獲取Spring管理的Bean
寫一個(gè)SpringContextUtils專門去獲取Spring管理的Bean。也就是說 被注入對象 可以不交給Spring管理,就可以獲取Spring管理的Bean
import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware;public class SpringContextUtils implements ApplicationContextAware { private static ApplicationContext applicationContext;/*** 如果實(shí)現(xiàn)了ApplicationContextAware接口,在Bean的實(shí)例化時(shí)會(huì)自動(dòng)調(diào)用setApplicationContext()方法*/@Overridepublic void setApplicationContext(ApplicationContext applicationContext)throws BeansException {SpringContextUtils.applicationContext = applicationContext;}public static <T> T getBean(Class<T> clazz) {return applicationContext.getBean(clazz);}}注意點(diǎn)
?SpringContextUtils必須在Spring中配置bean(也就是SpringContextUtils必須交給Spring管理) 不然?在Bean的實(shí)例化時(shí)不會(huì)自動(dòng)調(diào)用setApplicationContext()方法
?SpringContextUtils中的ApplicationContext需要是static的
這樣 我們就可在任何代碼任何地方任何時(shí)候中取出ApplicaitonContext. 從而獲取Spring管理的Bean
轉(zhuǎn)載于:https://www.cnblogs.com/ssskkk/p/9178338.html
總結(jié)
以上是生活随笔為你收集整理的怎么随时获取Spring的上下文ApplicaitonContext,和Spring管理的Bean的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux学习-----开机启动项设置,
- 下一篇: 操作系统中的P-V操作(转)