獲取spring容器總的BeanFactory
專案用到了ApplicationContextAware,通過它spring容器會自動把上下文環境物件呼叫ApplicationContextAware介面中的setApplicationContext方法。
我們在ApplicationContextAware的實現類中,就可以通過這個上下文環境物件得到Spring容器中的Bean。
使用方法如下:
1.實現ApplicationContextAware介面:
[java] view plain copy print?- package com.bis.majian.practice.module.spring.util;
-
import
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.ApplicationContextAware;
- publicclass SpringContextHelper implements ApplicationContextAware {
- privatestatic ApplicationContext context = null;
-
@Override
- publicvoid setApplicationContext(ApplicationContext applicationContext)
- throws BeansException {
- context = applicationContext;
- }
- publicstatic Object getBean(String name){
- return context.getBean(name);
- }
- }
2.在Spring的配置檔案中配置這個類,Spring容器會在載入完Spring容器後把上下文物件呼叫這個物件中的setApplicationContext方法:
- <?xmlversion="1.0"encoding="UTF-8"?>
- <beansxmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:tx="http://www.springframework.org/schema/tx"
- xmlns:context="http://www.springframework.org/schema/context"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
- http://www.springframework.org/schema/tx
- http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-3.0.xsd" default-autowire="byName">
- <beanid="springContextHelper"class="com.bis.majian.practice.module.spring.util.SpringContextHelper"></bean>
- <context:component-scanbase-package="com.bis.majian.practice.module.*"/>
- </beans>
3.在web專案中的web.xml中配置載入Spring容器的Listener:
- <!-- 初始化Spring容器,讓Spring容器隨Web應用的啟動而自動啟動 -->
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
- </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裡面的查詢方法。由於這個類沒有初始