Spring中ServletContextAware介面使用理解
在Spring中,凡是實現ServletContextAware介面的類,都可以取得ServletContext。實現如下:
1 2 3 4 |
private ServletContext application;
public void setServletContext(ServletContext servletContext) {
this .application = servletContext;
}
|
那麼Spring是在什麼時候把ServletContext放置進去的呢?通過對Spring的學習,終於明白了。
在web專案中,Spring容器的載入是通過XmlWebApplicationContext進行的。
它的父類AbstractRefreshableWebApplicationContext,在postProcessBeanFactory方法中進行了如下操作(postProcessBeanFactory方法被AbstractApplicationContext的refresh方法呼叫)
1 2 3 4 5 |
beanFactory.addBeanPostProcessor( new ServletContextAwareProcessor( this .servletContext, this .servletConfig));
beanFactory.ignoreDependencyInterface(ServletContextAware. class );
beanFactory.ignoreDependencyInterface(ServletConfigAware. class );
WebApplicationContextUtils.registerWebApplicationScopes(beanFactory, this .servletContext);
WebApplicationContextUtils.registerEnvironmentBeans(beanFactory, this .servletContext, this .servletConfig);
|
程式碼的第一句就是添加了一個ServletContextAwareProcessor。
該類的postProcessBeforeInitialization方法如下:
1 2 3 4 5 6 7 8 9 |
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
if ( this .servletContext != null && bean instanceof ServletContextAware) {
((ServletContextAware) bean).setServletContext( this .servletContext);
}
if ( this .servletConfig != null && bean instanceof ServletConfigAware) {
((ServletConfigAware) bean).setServletConfig( this .servletConfig);
}
return bean;
}
|
而所有的BeanPostProcessor都將在AbstractAutowireCapableBeanFactory類的initializeBean方法中,通過呼叫applyBeanPostProcessorsBeforeInitialization方法完成所有實現BeanPostProcessor介面的postProcessBeforeInitialization的呼叫。
XmlWebApplicationContext使用的BeanFactory是DefaultListableBeanFactory。
DefaultListableBeanFactory繼承了AbstractAutowireCapableBeanFactory,因此可以完成上述操作。
如此完成了只要實現了ServletContextAware介面的,都可以獲取ServletContext。
相關推薦
Spring中ServletContextAware介面使用理解
在Spring中,凡是實現ServletContextAware介面的類,都可以取得ServletContext。實現如下: 1 2 3 4 private ServletContext application; public void setSer
spring中InitializingBean介面使用理解
InitializingBean介面為bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是繼承該介面的類,在初始化bean的時候會執行該方法。 測試程式如下: import org.springframework.beans
Spring中Bean的理解以及@Bean的作用
是把 ring con 通過 自動配置 面向對象 ava 符號 反射 一、Bean是啥 1、Java面向對象,對象有方法和屬性,那麽就需要對象實例來調用方法和屬性(即實例化); 2、凡是有方法或屬性的類都需要實例化,這樣才能具象化去使用這些方法和屬性; 3、規律:凡是子類及
【記錄】spring中一個介面多個實現類
重構遇到個小問題,記錄下: 錯誤資訊: *************************** APPLICATION FAILED TO START *************************** Description: Field xxxService in com.ali
對於spring中ioc的理解(淺顯易懂)
目錄 ioc是什麼? 首先ioc是Inversion of Control的縮寫 ,翻譯成中文就是:控制反轉的意思。接下來就把這個詞拆開來解釋 如何理解“控制”? 之前我們通過 "類名 物件名 = new 類名( )"的方式進行物件的建立,也就是說
Spring中Ordered介面簡介
目錄 前言 Spring中提供了一個Ordered介面。Ordered介面,顧名思義,就是用來排序的。 Spring是一個大量使用策略設計模式的框架,這意味著有很多相同介面的實現類,那麼必定會有優先順序的問題。 於是,Spring就提供了Ordered這個介面,來
spring中ApplicationContextAware介面的應用
為什麼使用ApplicationContextAware介面: 在spring專案中,類之間的關係是spring容器來管理的,但是一個專案中有些類不受spring容器管理缺需要使用受spring管理的bean,這時候不能通過正常的方式注入bean,這時候spri
Spring中ApplicationContextAware介面用法
載入Spring配置檔案時,如果Spring配置檔案中所定義的Bean類,如果該類實現了ApplicationContextAware介面,那麼在載入Spring配置檔案時,會自動呼叫ApplicationContextAware介面中的 public void setAp
spring中aware介面(5)
2016/1/16 12:45:20 1.Aware spring中提供了一些以Aware結尾的介面,實現了Aware介面的bean在被初始化之後,可以獲取相應資源 通過Aware介面,可以對Spring相應資源進行操作(一定要慎重) 為對Spri
對spring中IOC的理解和使用spring的好處
依賴注入(Dependency Injection)和控制反轉(Inversion of Control)是同一個概念。具體含義是:當某個角色(可能是一個Java例項,呼叫者)需要另一個角色(另一個Java例項,被呼叫者)的協助時,在傳統的程式設計過程中,通常由
Spring中WebApplicationInitializer的理解
現在JavaConfig配置方式在逐步取代xml配置方式。而WebApplicationInitializer可以看做是Web.xml的替代,它是一個介面。通過實現WebApplicationInitializer,在其中可以新增servlet,listener等,在
spring中InitializingBean接口使用理解
path 問題: .get itme tex protected 測試程序 其中 tin InitializingBean接口為bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是繼承該接口的類,在初始化bean的時候會執行該方法。測試
spring中面向切面編程(AOP)的個人理解
.com throw logs ima 正則表達式 正則 ring 菜刀 整合 面向切面編程AOP,是spring的一大特點 Aspect切面:封裝共性功能的(增強功能的)類 Advice通過:切面類中封裝的增強功能的方法。 PointCut:切入點,是一個集合的概念,
Spring中AOP的一個通俗易懂的理解(轉)
學會 事物 nbsp 連接 新的 之前 天都 這不 proxy 這是看到的一個最易懂得AOP簡介了,適合初學者理解。 轉自:http://www.verydemo.com/demo_c143_i20837.html 1.我所知道的aop 初看aop,上來就是一大堆術語,
理解Spring中的IOC和AOP
nfa 重復 高度 只需要 spring框架 aop 編程 靈活 攔截 我們是在使用Spring框架的過程中,其實就是為了使用IOC,依賴註入和AOP,面向切面編程,這兩個是Spring的靈魂。 主要用到的設計模式有工廠模式和代理模式 IOC就是典型的工廠模式,通過se
對Spring中IOC和AOP的理解
ted program 條件 ogr class spring配置 所有 com 語法 IOC:控制反轉也叫依賴註入。利用了工廠模式。 為了方便理解,分解成每條以便記憶。 1.將對象交給容器管理,你只需要在spring配置文件總配置相應的bean,以及設置相關的屬性,讓
spring [email protected]中value的理解
先看原始碼 /** * Names of the caches in which method invocation results are stored. * <p>Names may be used to determine the target cache (or cac
spring 官方文件的介面理解整理(四)型別轉換spring例項解析
上篇文章解析了spring型別轉換的介面和他們的分工,怎麼通過設計模式實現轉換功能。 這篇需要些上篇的知識,如果沒有看可以從這兒跳轉spring 官方文件的介面理解整理(三)型別轉換 一、準備新建Maven專案,pom.xml內容如下 <properties>
spring 官方文件的介面理解整理(三)型別轉換
所有相關介面的uml圖: 一、spring中型別轉換裡面我開始看的時候覺得converter和formatter的功能很多疑問,先來分析這兩個介面: 1、Converter.java package org.springframework.core.convert.
對 spring中xml配置的初步理解,併成功注入(spring jar包版本號一定要同一)
//.java package com.learning.ioc.interfaces; public interface OneInterface { public void say(String arg); } package com.learning.ioc.int