Java類獲取spring 容器的bean的5種方法

shwenwen發表於2012-06-06

方法一:在初始化時儲存ApplicationContext物件
方法二:透過Spring提供的工具類獲取ApplicationContext物件
方法三:繼承自抽象類ApplicationObjectSupport
方法四:繼承自抽象類WebApplicationObjectSupport
方法五:實現介面ApplicationContextAware

[@more@]

常用的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

Title

Code highlighting produced by Actipro CodeHighlighter (freeware)


--&gt1 import org.springframework.web.context.ContextLoader; 2 import org.springframework.web.context.WebApplicationContext; 3 4 WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext(); 5 wac.getBean(beanID);

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/143526/viewspace-1058439/,如需轉載,請註明出處,否則將追究法律責任。

相關文章