Spring框架大家用得很多,相當熟悉,但是我對里面的運作比較好奇,例如bean的加載和使用,和我們定義的配置文件有什么聯系;又例如aop在什么時候起作用,原理又是怎樣.經過一個了解后,整理了啟動和執行流程,只是描述我在意的流程分支,並不是全部源碼流程.
在說流程之前,有幾個概念是需要了解的
StandardContext Tomcat中定義的容器,一個Web應用對應一個StandardContext
ServletContext Servlet規范中定義的,算是所有Servlet的上下文
ServletContextListener 實現該接口的類,可以監聽到 StandardContext初始化完成事實和銷毀完成事件
ApplicationContext Spring中定義的容器接口,MVC使用的實現類是WebApplicationContext
Bean Spring容器中的元素,能夠實現某些功能。除了Spring內置的,還有就是我們用注解定義和在配置中定義的Bean。
BeanFactory Bean工廠接口,在Spring中有各種各樣的實現類,Bean在工廠中以BeanDefinition方式存在,負責在需要的時候將Bean實例化
BeanPostProcessor Bean的后置處理器,通常在Bean實例化之后再包裝處理一遍。如AutowiredAnnotationBeanPostProcessor用來處理注解autowire,再如aop的BeanPostProcessor就這個時候生成bean的代理
DispatcherServlet Spring定義的Servlet,負責處理所有請求,並分配到達對應Controller。
下面的啟動流程,其實算是源碼流程,主要是寫我比較感興趣的bean加載和aop加載流程。
一次請求到達的處理流程,主要是寫bean的實例化的過程