1. 程式人生 > >Spring中ServletContextAware介面使用理解

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。

相關推薦

SpringServletContextAware介面使用理解

在Spring中,凡是實現ServletContextAware介面的類,都可以取得ServletContext。實現如下:  1 2 3 4 private ServletContext application; public void setSer

springInitializingBean介面使用理解

InitializingBean介面為bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是繼承該介面的類,在初始化bean的時候會執行該方法。 測試程式如下: import org.springframework.beans

SpringBean的理解以及@Bean的作用

是把 ring con 通過 自動配置 面向對象 ava 符號 反射 一、Bean是啥 1、Java面向對象,對象有方法和屬性,那麽就需要對象實例來調用方法和屬性(即實例化); 2、凡是有方法或屬性的類都需要實例化,這樣才能具象化去使用這些方法和屬性; 3、規律:凡是子類及

【記錄】spring一個介面多個實現類

重構遇到個小問題,記錄下: 錯誤資訊: *************************** APPLICATION FAILED TO START *************************** Description: Field xxxService in com.ali

對於springioc的理解(淺顯易懂)

目錄 ioc是什麼? 首先ioc是Inversion of Control的縮寫 ,翻譯成中文就是:控制反轉的意思。接下來就把這個詞拆開來解釋 如何理解“控制”? 之前我們通過 "類名 物件名 = new 類名( )"的方式進行物件的建立,也就是說

SpringOrdered介面簡介

目錄 前言 Spring中提供了一個Ordered介面。Ordered介面,顧名思義,就是用來排序的。 Spring是一個大量使用策略設計模式的框架,這意味著有很多相同介面的實現類,那麼必定會有優先順序的問題。 於是,Spring就提供了Ordered這個介面,來

springApplicationContextAware介面的應用

為什麼使用ApplicationContextAware介面: 在spring專案中,類之間的關係是spring容器來管理的,但是一個專案中有些類不受spring容器管理缺需要使用受spring管理的bean,這時候不能通過正常的方式注入bean,這時候spri

SpringApplicationContextAware介面用法

載入Spring配置檔案時,如果Spring配置檔案中所定義的Bean類,如果該類實現了ApplicationContextAware介面,那麼在載入Spring配置檔案時,會自動呼叫ApplicationContextAware介面中的 public void setAp

springaware介面(5)

2016/1/16 12:45:20 1.Aware spring中提供了一些以Aware結尾的介面,實現了Aware介面的bean在被初始化之後,可以獲取相應資源 通過Aware介面,可以對Spring相應資源進行操作(一定要慎重) 為對Spri

springIOC的理解和使用spring的好處

依賴注入(Dependency Injection)和控制反轉(Inversion of Control)是同一個概念。具體含義是:當某個角色(可能是一個Java例項,呼叫者)需要另一個角色(另一個Java例項,被呼叫者)的協助時,在傳統的程式設計過程中,通常由

SpringWebApplicationInitializer的理解

    現在JavaConfig配置方式在逐步取代xml配置方式。而WebApplicationInitializer可以看做是Web.xml的替代,它是一個介面。通過實現WebApplicationInitializer,在其中可以新增servlet,listener等,在

springInitializingBean接口使用理解

path 問題: .get itme tex protected 測試程序 其中 tin   InitializingBean接口為bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是繼承該接口的類,在初始化bean的時候會執行該方法。測試

spring面向切面編程(AOP)的個人理解

.com throw logs ima 正則表達式 正則 ring 菜刀 整合 面向切面編程AOP,是spring的一大特點 Aspect切面:封裝共性功能的(增強功能的)類 Advice通過:切面類中封裝的增強功能的方法。 PointCut:切入點,是一個集合的概念,

SpringAOP的一個通俗易懂的理解(轉)

學會 事物 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

SpringIOC和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.

springxml配置的初步理解,併成功注入(spring jar包版本號一定要同一)

//.java package com.learning.ioc.interfaces; public interface OneInterface { public void say(String arg); } package com.learning.ioc.int