一:使用ApplicationContext得到Beanjava
首先新建一個類,該類必須實現ApplicationContextAware接口,改接口有一個方法,public void setApplicationContext(ApplicationContext applicationContext)throws BeansException ,web
也就是說框架會自動調用這個方法返回一個ApplicationContext對象。具體類以下:spring
該類中有一個getBean(String name)方法,該方法用applicationContext去得到Bean實例,而applicationContextapp
是由系統啓動時自動設置的。注意,在applicationContext.xml配置文件中須要把該類加上。<bean id="springUtils" class="en.estar.utils.SpringContextUtils"/>框架
二:經過BeanFactory接口得到Bean工具
也是新建一個類,不過該類須要實現BeanFactoryAware接口,該接口有一個方法public void setBeanFactory(BeanFactory beanFactory) throws BeansException;該方法是爲了設置BeanFactory對象,系統會在啓動的時候自動設置BeanFactory。具體代碼以下:測試
不過應該注意的是,改類中有一個getInstance方法,因爲該代碼是網上摘抄的,他提供了這麼一個方法,目的是利用單例模式得到該類的一個實例,但因爲getBean(String name)方法是靜態的,因此用不用單例都可有可無,通過測試,兩種方法都行的通。另一點就是必須把該類添加到applicationContext.xml的配置文件中<bean id="springBeanFactoryUtils" class="en.estar.utils.SpringBeanFactoryUtils"/>ui
三:在servlet中能夠用WebApplicationContext類去獲取Bean,具體作法是:this
其中context是servlet的上下文,在servlet中能夠經過this.getServletContext()或者request.getSession().getServletContext();得到servletContext。可是一點,spring的配置文件必須在WEB-INF下。WebApplicationContext 有一個方法getBean(String name);其實WebApplicationContext 就是ApplicationContext的另外一種形式而已。spa
另外,在普通的java類中,即不是在servlet中能夠用ContextLoader得到。ContextLoader是org.springframework.web.context包當中的一個類。
1 private static WebApplicationContext webApplication = ContextLoader.getCurrentWebApplicationContext();
用這種方法就能獲取一個WebApplicationContext 的對象。
最後通過測試,在重複100000次的基礎上,第一二中方法只用了16毫秒,而第三種方法消耗了62毫秒,因此推薦使用第一二種方法。