首頁  >  文章  >  Java  >  Java類別取得Spring中bean的5種方式

Java類別取得Spring中bean的5種方式

高洛峰
高洛峰原創
2017-01-23 11:00:241716瀏覽

取得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");

說明:
1、這兩種方式都適合採用Spring框架的B/S系統,透過ServletContext物件取得ApplicationContext對象,然後在透過它取得需求的類別實例;
2、第一種方式在取得失敗時拋出異常,第二種方式回傳null。
第三種:繼承自抽象類別ApplicationObjectSupport

說明:透過抽象類別ApplicationObjectSupport提供的getApplicationContext()方法可以方便的取得到ApplicationContext實例,進而取得Spring容器中的bean。 Spring初始化時,會透過該抽象類別的setApplicationContext(ApplicationContext context)方法將ApplicationContext 物件注入。
第四種:繼承自抽象類別WebApplicationObjectSupport

說明:和上面方法類似,透過呼叫getWebApplicationContext()取得WebApplicationContext實例;
第五種:實作介面ApplicationContextAware

說明:實作該介面的setContextContextptextp ,並儲存ApplicationContext物件。 Spring初始化時,會透過此方法將ApplicationContext物件注入。

雖然Spring提供了後三種方法可以實現在普通的類別中繼承或實現相應的類別或介面來取得Spring的ApplicationContext對象,但是在使用時一定要注意繼承或實作這些抽象類別或介面的普通java類別一定要在Spring的設定檔(即application-context.xml檔案)中進行配置,否則取得的ApplicationContext物件將為null。

下面透過實作介面ApplicationContextAware的方式示範如何取得Spring容器中的bean:
首先自訂一個實作了ApplicationContextAware介面的類別,實作裡面的方法:

package com.ghj.tool;
 
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 ac = null;
 private static SpringConfigTool springConfigTool = null;
 
 public synchronized static SpringConfigTool init() {
 if (springConfigTool == null) {
  springConfigTool = new SpringConfigTool();
 }
 return springConfigTool;
 }
 
 public void setApplicationContext(ApplicationContext applicationContext)throws BeansException {
 ac = applicationContext;
 }
 
 public synchronized static Object getBean(String beanName) {
 return ac.getBean(beanName);
 }
}

  

<bean id="SpringConfigTool" class="com.ghj.tool.SpringConfigTool"/>

最後透過以下程式碼就可以取得Spring容器中對應的bean了:

SpringConfigTool.getBean("beanId");

注意一點,在伺服器啟動Spring容器初始化時,不能透過以下方法取得Spring容器:

import org.springframework.web.context.ContextLoader;
import org.springframework.web.context.WebApplicationContext;
  
WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();
wac.getBean(beanID);

以上就是本文的全部內容,希望對大家的學習有幫助。

更多Java類別取得Spring中bean的5種方式相關文章請關注PHP中文網!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn