1.簡單介紹一下Spring
Spring是一個開源框架,主要目的是簡化企業開發!它的核心部分爲IOC(控制反轉)和Aop(面向切面編程);使用Spring可以降低各個組件間的耦合度,他對主流的應用框架如:SpringMvc、MyBatis、Strtus2等提供了很好的集成,簡化了開發步驟。
2.理解IOC和AOP
1.IOC:控制反轉,將原本手動new 對象的權力交給Spring工廠,由Spring工廠來負責實例化對象以及維護對象與對象之間的依賴關係。
2.AOP:在原本的OOP編程中,不可避免會有很多重複代碼,或者代碼與代碼之間的強耦合性,SpringAOP很好的解決了這樣的問題,他使用動態代理,動態獲取目標類對象,反射執行方法,爲目標方法提供了一個可拔插的選項,避免了代碼冗餘和代碼與代碼之間的強耦合。
3.你瞭解動態代理嗎
再Spring中實施了兩種代理模式,即Cglib和jdk代理模式。
1.JDK代理:JDK的動態代理必須指定接口,這些接口都是已經被代理對象實現了的
2.CGLIB代理:CGLIB代理不需要指定接口
4.JDK動態代理的實現方式
基於JDK的動態代理需要實現InvocationHandler接口,通過類加載器
Class.ClassLocald()
,獲取類對象,反射invoke()執行目標方法,缺點是隻能基於接口進行代理
5.CGLIB動態代理的實現思路
基於CGLIB動態代理的方式,方法需要實現MethodInterceptor接口,覆蓋intercept方法,通過參數methodProxy的methodProxy.invokeSuper(Object methodName,Object[] args)方法執行方法;他可以不用依賴於接口執行:
缺點:他不能代理find方法
6.SpringBean工廠的實例化步驟
1.加載配置文件或者配置類
(重點)
2.通過BeanID找到類的全限定名,反射加載對象
(重點)
3.判斷對象是否設置爲了單例模式,如果是單例模式直接返回
(重點)
4.執行依賴檢查,防止循環依賴
5.如果存在依賴對象(注入對象),則進行遞歸創建,反射賦值到對應的屬性上。
6.返回Bean實例
7.什麼是單例模式
他是一種設計模式,一個類只有一個實例,能夠自行初始化,並且向系統提供全局的訪問接口
8.單例模式實現原理
單例模式比較流行的分爲懶漢式和餓漢式
8.1 :單例模式懶漢式速記
首先先私有化無參構造防止外部手動實例化!
突出一個懶字,每一次用的時候纔會去判斷是不是爲null,爲null就創建對象,不爲null就直接返回,不用就不判斷!懶
package com.singlecase; import org.apache.poi.ss.formula.functions.T; /** * 傳說中的懶漢式單例 * 每一次等到用的時候纔會判斷它是否已經實例化了 所以說它懶啊 * @author 皇甫 */ public class LazySingleCase { private static LazySingleCase lazySingleCase; /** * 私有化構造函數 不讓用戶手動創建只能被動獲取 */ private LazySingleCase(){} /** * 提供返回對象的方法 * @return */ public static LazySingleCase getInstance() throws InterruptedException { //用的時候纔會去判斷是不是爲null if(lazySingleCase == null){ lazySingleCase = new LazySingleCase(); } return lazySingleCase; } }
8.2:單例模式餓漢式速記
設置私有的靜態的成員對象,JVM保證,靜態屬性只被加載一次
首先先私有化無參構造防止外部手動實例化!
重點突出一個餓字,不管你能不能使用,我都會創建對象,static特點;因爲餓,所以看見就吃,不管好 不好吃,因爲餓,所以看見就創建不管用不用的上!
package com.singlecase; /** * 餓漢式單例模式 * @author 皇甫 */ public class HungryChineseSingleCase { /** * 靜態成員變量 */ private static HungryChineseSingleCase hungryChineseSingleCase = new HungryChineseSingleCase(); private HungryChineseSingleCase(){} /** * 直接返回實例 * @return */ public static HungryChineseSingleCase getInstance(){ return hungryChineseSingleCase; } }
9.單例模式的懶漢式和餓漢式的優缺點
懶漢式 :節省空間,但是線程不安全
餓漢式:線程安全,但是不節省空間
10.簡單描述一下SpringMVC的執行流程
首先需要了解一點,再SpringMVC容器進行初始化的時候,會遍歷所有的帶有
@Controller的類
,將類裏面的方法與@RequestMapping("xxxxx")
的值做Map映射Map<String,Method>
,比如@Controller public class userController{ @RequestMapping("/user/findAll") public List<User> findAllUser(){ return new ArrayList<User>(); } }
模擬以上方法,它在容器初始化時Map映射爲**("/user/findAll"---------->findAllUser)**
執行步驟如下:
1.客戶端發送請求被DispathcherServlet攔截,發送給處理映射器(Handler Mapping),會根據url查詢Map集合,返回Method對象,返回給DispathcherServlet
2.DispathcherServlet將方法對象給處理器映射器(Handler Adapter),執行Method.invoke()方法,返回ModeAndView給處理器映射器(Handler Adapter),再次將ModeAndView返回給DispathcherServlet
3.DispathcherServlet將試圖對象(ModeAndView)傳遞給視圖解析器(view Resolver),返回視圖信息給DispathcherServlet
4…DispathcherServlet將視圖信息返回給客戶端
喜歡這篇文章的小夥伴,請識別下方二維碼關注本公衆號,小編不定期贈送免費的學習資源哦
關注公衆號,我會不定期贈送各種java學習資源
下面是我的個人微信號,歡迎叨擾!