1. 程式人生 > >獲取spring容器總的BeanFactory

獲取spring容器總的BeanFactory

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

我們在ApplicationContextAware的實現類中,就可以通過這個上下文環境物件得到Spring容器中的Bean。

使用方法如下:

1.實現ApplicationContextAware介面:

[java] view plain copy  print?
  1. package com.bis.majian.practice.module.spring.util;  
  2. import
     org.springframework.beans.BeansException;  
  3. import org.springframework.context.ApplicationContext;  
  4. import org.springframework.context.ApplicationContextAware;  
  5. publicclass SpringContextHelper implements ApplicationContextAware {  
  6.     privatestatic ApplicationContext context = null;  
  7.     @Override
  8.     publicvoid setApplicationContext(ApplicationContext applicationContext)  
  9.             throws BeansException {  
  10.         context = applicationContext;  
  11.     }  
  12.     publicstatic Object getBean(String name){  
  13.         return context.getBean(name);  
  14.     }  
  15. }  


2.在Spring的配置檔案中配置這個類,Spring容器會在載入完Spring容器後把上下文物件呼叫這個物件中的setApplicationContext方法:

[html] view plain copy  print?
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <beansxmlns="http://www.springframework.org/schema/beans"
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:tx="http://www.springframework.org/schema/tx"
  4.     xmlns:context="http://www.springframework.org/schema/context"
  5.     xsi:schemaLocation="http://www.springframework.org/schema/beans   
  6.     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd   
  7.     http://www.springframework.org/schema/tx   
  8.     http://www.springframework.org/schema/tx/spring-tx-3.0.xsd   
  9.     http://www.springframework.org/schema/context   
  10.     http://www.springframework.org/schema/context/spring-context-3.0.xsd" default-autowire="byName">
  11.     <beanid="springContextHelper"class="com.bis.majian.practice.module.spring.util.SpringContextHelper"></bean>
  12.     <context:component-scanbase-package="com.bis.majian.practice.module.*"/>
  13. </beans>


3.在web專案中的web.xml中配置載入Spring容器的Listener:

[html] view plain copy  print?
  1. <!-- 初始化Spring容器,讓Spring容器隨Web應用的啟動而自動啟動 -->
  2.     <listener>
  3.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  4.     </listener>


4.在專案中即可通過這個SpringContextHelper呼叫getBean()方法得到Spring容器中的物件了。

spring中,普通bean可以通過實現ApplicationContextAware得到ApplicationContext,需要重寫setApplicationContext和getApplicationContext兩個方法。我們知道,是通過setApplicationContext將spring的當前的applicationContext得到,那麼spring是什麼時候執行setApplicationContext方法的呢?

      Spring原始碼中ApplicationContextAwareProcessor.postProcessBeforeInitialization(),對繼承自ApplicationContextAware的bean進行處理,呼叫其setApplicationContext。而ApplicationContextAwareProcessor是在spring容器start的時候生成的。


主要工作流程:

相關推薦

獲取spring容器總的BeanFactory

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

普通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

實現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註解注入物件,然後啟動,訪問時報空

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容器工具類SpringContextUtil

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

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

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

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

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

獲取Spring容器物件

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

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

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

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

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

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

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

springboot獲取spring容器裡面的bean進行呼叫

業務場景:springcloud中的service端中,activity流程中一個流程發起之後由activity框架裡面的監聽一個節點結束,到另外一個節點發起。在這過程中,需要繼承activity裡面的介面然後呼叫service裡面的查詢方法。由於這個類沒有初始