Java類獲取spring 容器的bean

Java類獲取spring 容器的bean


經常使用的5種獲取spring bean的方式總結:

方法一:在初始化時保存ApplicationContext對象
代碼:
ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml");
ac.getBean("beanId");
說明:這種方式適用於採用Spring框架的獨立應用程序,須要程序經過配置文件手工初始化Spring的狀況。

方法二:經過Spring提供的工具類獲取ApplicationContext對象
代碼:
import org.springframework.web.context.support.WebApplicationContextUtils;
ApplicationContext ac1 = WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext sc);
ApplicationContext ac2 = WebApplicationContextUtils.getWebApplicationContext(ServletContext sc);
ac1.getBean("beanId");
ac2.getBean("beanId");
說明:
這種方式適合於採用Spring框架的B/S系統,經過ServletContext對象獲取ApplicationContext對象,而後在經過它獲取須要的類實例。

上面兩個工具方式的區別是,前者在獲取失敗時拋出異常,後者返回null

方法三:繼承自抽象類ApplicationObjectSupport
說明:抽象類ApplicationObjectSupport提供getApplicationContext()方法,能夠方便的獲取到ApplicationContext
Spring
初始化時,會經過該抽象類的setApplicationContext(ApplicationContext context)方法將ApplicationContext 對象注入。

方法四:繼承自抽象類WebApplicationObjectSupport
說明:相似上面方法,調用getWebApplicationContext()獲取WebApplicationContext

方法五:實現接口ApplicationContextAware
說明:實現該接口的setApplicationContext(ApplicationContext context)方法,並保存ApplicationContext 對象。
Spring
初始化時,會經過該方法將ApplicationContext對象注入。



然,spring提供了後三種方法能夠實如今普通的類中繼承或實現相應的類或接口來獲取spring ApplicationContext對象,可是在使用是必定要注意實現了這些類或接口的普通java類必定要在Spring 的配置文件application-context.xml文件中進行配置。不然獲取的ApplicationContext對象將爲null



以下是我實現了ApplicationContextAware接口的例子

package quartz.util;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

public class SpringConfigTool implements ApplicationContextAware{//extends ApplicationObjectSupport{

private static ApplicationContext context = null;
private static SpringConfigTool stools = null;
public synchronized static SpringConfigTool init(){
  if(stools == null){
   stools = new SpringConfigTool();
  }
  return stools;
}

public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
  context = applicationContext;
}

public synchronized static Object getBean(String beanName) {
  return context.getBean(beanName);
}

}



XML
文件中的配置信息



最後提供一種不依賴於servlet,不須要注入的方式
注意一點,在服務器啓動時,Spring容器初始化時,不能經過如下方法獲取Spring 容器,如需細節能夠觀看源碼org.springframework.web.context.ContextLoader Title1 import org.springframework.web.context.ContextLoader;  import org.springframework.web.context.WebApplicationContext;    WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();    wac.getBean(beanID); 

相關文章
相關標籤/搜索