IOC
控制反轉(zhuǎn)簿废,用一句話解釋這個概念就是將對象的創(chuàng)建和獲取提取到外部。由外部容器提供需要的組件络它。
AOP
確實就是代理模式的體現(xiàn)族檬,
面向?qū)ο缶幊虒⒊绦蚍纸獬筛鱾€層次的對象,面向切面編程將程序運行過程分解成各個切面化戳。
AOP從程序運行角度考慮程序的結(jié)構(gòu)单料,提取業(yè)務(wù)處理過程的切面,oop是靜態(tài)的抽象点楼,aop是動態(tài)的抽象扫尖,
Servlet繼承結(jié)構(gòu)中一共有五個類,
Java:GenericServlet,HttpServlet掠廓。
Spring:HttpServletBean,FrameWorkServlet和DispatcherServlet.
spring中换怖,這三個類實現(xiàn)了三個接口EnvironmentCapple,EnvironmentAware和Application-ContextAware.
xxxAware在spring中表示對xxx的感知,就是在某個類需要使用spring的一些東西蟀瞧,就可以通過實現(xiàn)xxxAware告訴spring,spring看到后就會給你送過來沉颂,接收的方式是通過實現(xiàn)唯一的方法set-XXX。EnvironmentCappable黄橘,就是具有Environment的能力,可以提供Environment,EnvironmentCappable唯一的方法是Environment getEnvironment(),用于實現(xiàn)EnvironmentCapable接口的類屈溉,告訴spring它可以提供Environment,當spring需要Environment的時候就會調(diào)用getEnvironment()方法跟他要塞关。
Environment就是環(huán)境,和servletcontex有點類似子巾,保存了全局的信息帆赢。
在HttpServeltBean中的Environment使用的是standard-servlet-Environment,在createEnvironment方法中創(chuàng)建小压,封裝了servletContext,還封裝了,servletconfig,JndiProperty(Initial Contexts設(shè)置默認屬性椰于。)怠益,系統(tǒng)環(huán)境變量,系統(tǒng)屬性等瘾婿。都封裝到propertySources屬性下蜻牢。
HttpServletBean
HttpServletBean分別實現(xiàn)了HttpServlet,EnvironmentCapable,EnvironmentAware.
簡單擴展HttpServlet,給各種類型的servlet提供了一個便利的超類偏陪,提供了對屬性的操作抢呆。
在HttpServletBean的init方法中,首先將Servlet中配置的參數(shù)使用BeanWrapper設(shè)置到DispatcherServlet的相關(guān)屬性笛谦。然后調(diào)用模板方法initServletBean,進行初始化抱虐。
FrameworkServlet
入口:initServletBean()
初始化webApplicationContext和FrameworkServlet.
initFrameworkServlet是模板方法,子類覆蓋后可以在里面做一些初始化的工作饥脑,但子類并沒有用它恳邀。
initWebApplicationContext:
1.獲取spring的根容器,rootContext.
2.設(shè)置webApplicationContext并根據(jù)情況調(diào)用onRefresh方法灶轰。
3.將webApplicationContext設(shè)置到ServletContext中谣沸。
根據(jù)publishContext標志位判斷是否將創(chuàng)建webApplicationContext設(shè)置到Servlet的屬性中。
配置servlet時設(shè)置的初始化參數(shù):
1.contextAtteibute:在ServletContext中框往,用作webApplicationContext的屬性名稱鳄抒。
2.contextclass:創(chuàng)建webApplicationContext的類型。
3.contextConfigloaction:spring mvc配置文件的位置椰弊。
4.publicContext:是否將webApplicationContext設(shè)置到ServletContext的屬性许溅。
DispatcherServlet
onRefresh()是DispatcherServlet的入口方法,onRefresh中簡單地調(diào)用了initStrategies方法秉版,在initStrategies中調(diào)用調(diào)用了9個init方法贤重。