Java類獲取spring 容器的bean的5種方法
方法一:在初始化時儲存ApplicationContext物件
方法二:透過Spring提供的工具類獲取ApplicationContext物件
方法三:繼承自抽象類ApplicationObjectSupport
方法四:繼承自抽象類WebApplicationObjectSupport
方法五:實現介面ApplicationContextAware
常用的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
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/143526/viewspace-1058439/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 獲取Spring容器中Bean例項的工具類(Java泛型方法實現)SpringBeanJava泛型
- 獲取spring裡的beanSpringBean
- 在專案中獲取Spring的Bean的幾種方式SpringBean
- Spring在程式碼中獲取bean的幾種方式SpringBean
- Spring6 當中 獲取 Bean 的四種方式SpringBean
- Java獲取Spring的各種物件JavaSpring物件
- Spring學習筆記四: 從Spring容器中獲取BeanSpring筆記Bean
- java中獲取類載入路徑和專案根路徑的5種方法Java
- 【Java】利用反射執行Spring容器Bean指定的方法,支援多種引數自動呼叫Java反射SpringBean
- servlet中手動獲取spring的beanServletSpringBean
- Spring Ioc原始碼分析系列--容器例項化Bean的四種方法Spring原始碼Bean
- java獲取當前路徑的幾種方法Java
- Java獲取堆疊資訊的3種方法Java
- Java之獲取隨機數的4種方法Java隨機
- 關於java獲取本地ip的幾種方法Java
- Spring Bean容器SpringBean
- Spring(十二):IOC容器中Bean的生命週期方法SpringBean
- Laravel 獲取 Route Parameters (路由引數) 的 5 種方法Laravel路由
- PHP --反射 --獲取類的方法PHP反射
- 獲取jdbctemplate的一種方法JDBC
- 4、Spring IOC容器 Bean物件例項化的3種方式SpringBean物件
- Spring中建立帶原型作用域bean5種方法Spring原型Bean
- Javascript獲取原型的四種方法JavaScript原型
- Activiti獲取ProcessEngine的三種方法
- 獲取 Class 物件的 3 種方法物件
- Spring容器 —— 深入 bean 的載入(五、初始化 bean)SpringBean
- 反射獲取注入到spring中的類物件的工具類反射Spring物件
- Spring IOC與Bean容器SpringBean
- @Resource從spring容器中獲取例項注入到類的成員變數中Spring變數
- 獲取表單物件的三種方法物件
- Spring注入Bean的幾種方式SpringBean
- Java獲取Object中Value的方法JavaObject
- Groovy獲取Bean兩種方式(奇淫技巧操作)Bean
- 你必須知道的幾種java容器(集合類)Java
- Spring - 獲取ApplicationContext的幾種方式SpringAPPContext
- Java中獲取JAR檔案中資源路徑的三種方法JavaJAR
- PHP獲取POST資料的3種方法PHP
- 獲取執行計劃的6種方法