SPRING IOC AOP MVC原理總結

SPRING IOC:

總結:
1.Spring IOC容器主要有繼承體系底層的BeanFactory、高層的ApplicationContext和WebApplicationContext 
2.容器啓動原理:Spring應用的IOC容器通過tomcat的Servlet或Listener監聽啓動加載;Spring MVC的容器由DispatchServlet作爲入口加載;Spring容器是Spring MVC容器的父容器
3.容器加載Bean原理:
1) BeanDefinitionReader讀取Resource所指向的配置文件資源,然後解析配置文件。配置文件中每一個<bean>解析成一個BeanDefinition對象,並保存到BeanDefinitionRegistry中;
2) 容器掃描BeanDefinitionRegistry中的BeanDefinition;調用InstantiationStrategy進行Bean實例化的工作;使用BeanWrapper完成Bean屬性的設置工作;
3) 單例Bean緩存池:Spring 在 DefaultSingletonBeanRegistry 類中提供了一個用於緩存單實例 Bean 的緩存器,它是一個用 HashMap 實現的緩存器,單實例的 Bean 以 beanName 爲鍵保存在這個HashMap 中。

Bean有自己的生命週期: 如果在<bean>中指定 Bean 的作用範圍爲 scope=“prototype”,將 Bean 返回給調用者,調用者負責 Bean 後續生命的管理, Spring 不再管理這個 Bean 的生命週期。如果作用範圍設置爲 scope=“singleton”,則將 Bean 放入到 Spring IoC 容器的緩存池中,並將 Bean引用返回給調用者, Spring 繼續對這些 Bean 進行後續的生命管理;

來源:
https://zhuanlan.zhihu.com/p/29344811


============================================================================
SPRING AOP:


AOP實現中,可以看到三個主要的步驟,一個是代理對象的生成,然後是切面的織入,然後是執行攔截器鏈。

1.Spring AOP代理對象的生成:
Spring提供了兩種方式來生成代理對象: JDKProxy和Cglib,具體使用哪種方式生成由AopProxyFactory根據AdvisedSupport對象的配置來決定。默認的策略是如果目標類是接口,則使用JDK動態代理技術,否則使用Cglib來生成代理。Spring使用JDK來生成代理對象,具體的生成代碼放在JdkDynamicAopProxy這個類中。

2.切面的織入
獲取可以應用到此方法上的通知鏈,Advised中配置能夠應用到連接點或者目標類的Advisor全部被轉化成了MethodInterceptor.

3.執行攔截器鏈
如果得到的攔截器鏈爲空,則直接反射調用目標方法,否則創建MethodInvocation,調用其proceed方法,觸發攔截器鏈的執行,

注意:
CGLib不能對聲明爲final的方法進行代理,因爲CGLib原理是動態生成被代理類的子類。

JDK代理三要素Proxy.newProxyInstance(類加載器,目標接口,InvocationHandler實現),JDKDynaimicAopProxy實現了InvocationHandler接口,並使用了AdvisedSupport中存在的目標接口,及設置的類加載器,進行JDK的動態代理。

CGLIB創建代理主要是創建Enhancer enhancer,並通過AdvisedSupport設置相應的屬性,比如目標類rootClass,如果由接口合併接口給代理類,最主要的是設置Callback集合和CallbackFilter,使用CallBackFilter可以根據方法的不同使用不同的Callback進行攔截和增強方法。其中最主要的使用於AOP的Callback是DynamicAdvisedInterceptor。

參考鏈接:
https://www.ibm.com/developerworks/cn/java/j-lo-springaopcglib/index.html 
https://www.2cto.com/kf/201603/496290.html


=====================================================================================================
SPRING MVC

SpringMVC流程
1、  用戶發送請求至前端控制器DispatcherServlet。
2、  DispatcherServlet收到請求調用HandlerMapping處理器映射器。
3、  處理器映射器找到具體的處理器(可以根據xml配置、註解進行查找),生成處理器對象及處理器攔截器(如果有則生成)一併返回給DispatcherServlet。
4、  DispatcherServlet調用HandlerAdapter處理器適配器。
5、  HandlerAdapter經過適配調用具體的處理器(Controller,也叫後端控制器)。
6、  Controller執行完成返回ModelAndView。
7、  HandlerAdapter將controller執行結果ModelAndView返回給DispatcherServlet。
8、  DispatcherServlet將ModelAndView傳給ViewReslover視圖解析器。
9、  ViewReslover解析後返回具體View。
10、DispatcherServlet根據View進行渲染視圖(即將模型數據填充至視圖中)。

11、 DispatcherServlet響應用戶。

參考鏈接:

https://www.cnblogs.com/xiaoxi/p/6164383.html


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章