一:使用ApplicationContext獲得Bean
首先新建一個類,該類必須實現ApplicationContextAware接口,改接口有一個方法,public void setApplicationContext(ApplicationContext applicationContext)throws BeansException ,
也就是說框架會自動調用這個方法返回一個ApplicationContext對象。具體類如下:
該類中有一個getBean(String name)方法,該方法用applicationContext去獲得Bean實例,而applicationContext
是由系統啟動時自動設置的。注意,在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"/>
三:在servlet中可以用WebApplicationContext類去獲取Bean,具體做法是:
其中context是servlet的上下文,在servlet中可以通過this.getServletContext()或者request.getSession().getServletContext();獲得servletContext。但是一點,spring的配置文件必須在WEB-INF下。WebApplicationContext 有一個方法getBean(String name);其實WebApplicationContext 就是ApplicationContext的另一種形式而已。
另外,在普通的java類中,即不是在servlet中可以用ContextLoader獲得。ContextLoader是org.springframework.web.context包當中的一個類。
-
1 private static WebApplicationContext webApplication = ContextLoader.getCurrentWebApplicationContext();
用這種方法就能獲取一個WebApplicationContext 的對象。
最后經過測試,在重復100000次的基礎上,第一二中方法只用了16毫秒,而第三種方法消耗了62毫秒,所以推薦使用第一二種方法。