1. 程式人生 > >獲取Spring容器物件

獲取Spring容器物件

眾所周知,Spring框架將DI模式發揮到了極至,因此,系統裡面用Spring管理的Bean相互之間的獲取是非常方便的,只要使用者提供一個setter方法並在配置檔案中配置該屬性就可以。

但是,對於系統中非Spring框架管理的類,如果需要獲取Spring管理的類,或者,程式中需要動態的根據Bean的id來獲取Bean例項,不可能事先為該類提供所有需要的Bean屬性的setter方法,在類似這樣的情況下,獲取Spring框架管理的類例項的方法有多種,現在簡單總結如下:




方法一:在初始化時儲存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框架上的,因此,系統中,應該儘量的減少這類應用,使系統儘可能的獨立於當前執行環境,儘量通過DI的方式獲取需要的服務提供者。

相關推薦

獲取Spring容器物件

眾所周知,Spring框架將DI模式發揮到了極至,因此,系統裡面用Spring管理的Bean相互之間的獲取是非常方便的,只要使用者提供一個setter方法並在配置檔案中配置該屬性就可以。 但是,對於系統中非Spring框架管理的類,如果需要獲取Spring管理的類,或者,程式中需要動態的根據Bean的id來

實現ApplicationContextAware介面,java(new或者java反射獲取物件)中獲取spring容器的bean

本文參考了https://blog.csdn.net/bailinbbc/article/details/76446594,其實是拷貝了很多內容: 在Web應用中,Spring容器通常採用宣告式方式配置產生:開發者只要在web.xml中配置一個Listener,該Listener將會負責初始化S

springboot整合filter之在filter中如何獲取spring容器中的bean物件

本人在專案使用的是springboot,具業務需要本人使用了filter過濾器,進行一個路徑攔截,本人配置的是攔截所有/*,然後對路徑中包含的特有欄位進行處理。 filter中需要使用service的bean物件,我使用@Autowired註解注入物件,然後啟動,訪問時報空

框架類---spring---Filter中獲取Spring容器中的bean物件

@Override public void init(FilterConfig filterConfig) throws ServletException { //獲取w

三、獲取Spring容器獲取容器中的Bean物件

  Spring中的容器物件介面是ApplicationContext,其作用就是載入配置檔案,並初始化所有的Bean物件(容器啟動時)。其實現類主要有2個,分別為: ClassPathXmlApplicationContext:載入類路徑下的Spring

在filter中獲取spring容器中的bean物件

在工作中的專案需要,要在filter中使用服務介面,但是採用傳統的new 和注入方式都是空指標異常,最後的解決方式是 @Override public void init(FilterConfig config) throws ServletExce

普通Java類獲取spring 容器的bean的5種方法 Spring注入非單例bean以及scope的作用範圍

本文轉載自:http://www.cnblogs.com/duanxz/archive/2014/06/18/3794075.html 方法一:在初始化時儲存ApplicationContext物件方法二:通過Spring提供的工具類獲取ApplicationContext物件方法三:繼承自抽象類Appli

springboot配置:通過工具類來獲取spring容器中的bean

**由於公司電腦限制,完全手敲,有單字錯誤望理解** @component @SuppressWarnings("static-access") public class AppContext implements ApplicationContextAware{   &n

mybatis免sql外掛之JpaMapper-以Jpa hibernate的風格寫mybatis(獲取spring容器中mybatis的mapper)

mybatis免sql外掛之JpaMapper-以Jpa hibernate的風格寫mybatis(獲取spring容器中mybatis的mapper) 簡介 JpaMapper以Jpa hibernate的風格寫mybatis的程式碼,可以減少手動寫sql的煩惱。 優勢:

Spring(4) Bean獲取Spring容器

當一個bean需要獲取它所在spring容器的時候,實際上這種情況是很常見的,例如要輸出國際化資訊,釋出事件等。 bean可以通過實現BeanFactoryAware介面實現獲取它所在的spring容器,BeanFactoryAware只有一個setBeanFactory方法,sprin

spring-web:在web應用中即使用監聽器建立spring容器物件

spring-web2:在web應用中,使用spring。spring管理Service,Dao物件,而servlet、JSP、監聽器物件是由Tomcat生成的 web專案中使用spring的問題: 1.容器物件建立多次了, 應該是建立一次 (在應用啟動的時候建立一次) 2.容器物件需要

bean獲取Spring容器

Person.java 1 public class Person implements ApplicationContextAware{ 2 3 private String name; 4 private int age; 5 priva

spring獲取spring容器建立的bean方式

場景:在spring中獲取spring容器建立的bean方式 public static Object getBean(String beanName) { return ContextLoader.getCurrentWebApplicationContext().getB

SpringBoot 之 普通類獲取Spring容器中的bean

我們知道如果我們要在一個類使用spring提供的bean物件,我們需要把這個類注入到spring容器中,交給spring容器進行管理,但是在實際當中,我們往往會碰到在一個普通的Java類中,想直接使用spring提供的其他物件或者說有一些不需要交給spring管理,但是需要

非託管類獲取Spring容器資訊

非託管類: 不受Spring容器管理的類; 獲取bean @Component public class SpringUtil implements ApplicationContextAware { private static ApplicationContext a

踩坑記:根據型別獲取Spring容器中的Bean

在專案開發中遇到了這樣的一個問題:有同事在BeanFactoryPostProcessor的實現方法中寫了類似這樣的一段程式碼: @Component public class BeanFactoryPostProcessorImpl implements

獲取spring容器總的BeanFactory

專案用到了ApplicationContextAware,通過它spring容器會自動把上下文環境物件呼叫ApplicationContextAware介面中的setApplicationContext方法。 我們在ApplicationContextAware的實現類中,

主動獲取spring容器工具類SpringContextUtil

/** * 獲取spring容器,以訪問容器中定義的其他bean */ @Component public class SpringContextUtil implements ApplicationContextAware { // Spring應用上下文

Spring如何管理Java普通類(Java類獲取Spring容器的bean)

方法一:在初始化時儲存ApplicationContext物件 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.x

ServletContextListener使用詳解以及web容器獲取spring容器

ServletContextListener 介面是servlet的一個介面,它能夠監聽 ServletContext 物件的生命週期,實際上就是監聽 Web 應用的生命週期(Tomcat的啟動與關閉)。 伺服器啟動時,ServletContextListener 的 co