非spring託管對象如何擷取到spring託管對象,spring託管

來源:互聯網
上載者:User

非spring託管對象如何擷取到spring託管對象,spring託管
一些thread類或servlet不能通過spring註解的方式調用spring容器裡面的類
嘗試將thread或servlet加上@component或@controller註解變成被spring容器管理,再調用spring容器裡面的其他類,失敗!
最終找出下面兩種解決方案:


一,通過spring設定檔applicationContext.xml初始化

[java] view plaincopy
import org.springframework.context.ApplicationContext;  
import org.springframework.context.support.FileSystemXmlApplicationContext;  
  
public class SpringUtil{  
    private static ApplicationContext applicationContext = null;  
      
    public static ApplicationContext getApplicationContext() {  
        if(applicationContext == null){  
            applicationContext = new FileSystemXmlApplicationContext("applicationContext.xml");  
        }  
        return applicationContext;  
    }  
}  
缺點:
這裡面的applicationContext.xml是全檔案路徑,這也是這種方式不是很靈活的原因之一,
調用SpringUtil會建立一次ApplicationContext對象.如果將static去掉改為非靜態,那麼每次調用該方法時都會new一個該對象,效率應該會更差.



二,通過實現ApplicationContextAware介面

在spring初始化時,會通過該介面實現的setApplicationComtext方法將ApplicationContext對象注入到該類中,具體見下面
我的解決方式選擇該種:

1、定義SpringUtil

import org.springframework.beans.BeansException;  
import org.springframework.context.ApplicationContext;  
import org.springframework.context.ApplicationContextAware;  
  
public class SpringUtil implements ApplicationContextAware {  
  
    private static ApplicationContext applicationContext;  
  
    public static ApplicationContext getApplicationContext() {  
        return applicationContext;  
    }  
  
    public void setApplicationContext(ApplicationContext applicationContext)throws BeansException {  
        SpringUtil.applicationContext = applicationContext;  
    }  

}  

2、spring的設定檔加入

<bean id="applicationContext" class="com.lefu.pushCore.other.SpringUtil"/>   

3、通過如下方法便能擷取到所有由spring管理的對象了:

PushController pushController = (PushController) SpringUtil.getApplicationContext().getBean("pushController");




參考文章:http://blog.csdn.net/a19881029/article/details/7842070

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.