Spring在代碼中獲取bean的幾種方式


Spring在代碼中獲取bean的幾種方式

方法一:在初始化時保存ApplicationContext對象 
方法二:通過Spring提供的utils類獲取ApplicationContext對象 
方法三:繼承自抽象類ApplicationObjectSupport 
方法四:繼承自抽象類WebApplicationObjectSupport 
方法五:實現接口ApplicationContextAware 
方法六:通過Spring提供的ContextLoader

獲取spring中bean的方式總結: 

方法一:在初始化時保存ApplicationContext對象

  1. ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml");
  2. ac.getBean("userService");//比如:<bean id="userService" class="com.cloud.service.impl.UserServiceImpl"></bean>

說明:這樣的方式適用於採用Spring框架的獨立應用程序,須要程序通過配置文件手工初始化Spring的情況。

方法二:通過Spring提供的工具類獲取ApplicationContext對象
  1. ApplicationContext ac1 = WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext sc);
  2. ApplicationContext ac2 = WebApplicationContextUtils.getWebApplicationContext(ServletContext sc);
  3. ac1.getBean("beanId");
  4. 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對象注入。

 

下面是實現ApplicationContextAware接口方式的代碼,前面兩種方法類似:

public class SpringContextUtil implements ApplicationContextAware {  
  
    // Spring應用上下文環境  
    private static ApplicationContext applicationContext;  
  
    /** 
     * 實現ApplicationContextAware接口的回調方法。設置上下文環境 
     *  
     * @param applicationContext 
     */  
    public void setApplicationContext(ApplicationContext applicationContext) {  
        SpringContextUtil.applicationContext = applicationContext;  
    }  
  
    /** 
     * @return ApplicationContext 
     */  
    public static ApplicationContext getApplicationContext() {  
        return applicationContext;  
    }  
  
    /** 
     * 獲取對象 
     *  
     * @param name 
     * @return Object
     * @throws BeansException 
     */  
    public static Object getBean(String name) throws BeansException {  
        return applicationContext.getBean(name);  
    }  
}

 

盡管,spring提供的后三種方法能夠實如今普通的類中繼承或實現對應的類或接口來獲取spring 的ApplicationContext對象,可是在使用是一定要注意實現了這些類或接口的普通java類一定要在Spring 的配置文件applicationContext.xml文件里進行配置。否則獲取的ApplicationContext對象將為null。

方法六:通過Spring提供的ContextLoader
WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();
wac.getBean(beanID);

  

 

最后提供一種不依賴於servlet,不須要注入的方式。可是須要注意一點,在server啟動時。Spring容器初始化時,不能通過下面方法獲取Spring 容器,細節能夠查看spring源代碼org.springframework.web.context.ContextLoader。

轉載:https://www.cnblogs.com/yjbjingcha/p/6752265.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM