spring學習知識點總結

一:反射機制

    反射機制是spring的底層靈魂,與反編譯有點類似,指定一個類名,直到運行時才加載這個類,運行時通過反編譯來獲取這個類的成員方法等。

    作用是實現類、方法間的解耦,不需要頻繁地 new 不同的對象,在編譯階段不報錯,例子如兩個合作開發但進度不同的程序猿。

一個需要調用另一個寫的類,可以用 forname 函數先申明,通過編譯後等另一個人的函數實現,即可直接運行。

    在spring中,更是通過將指定的類名寫入配置文件(properties文件)來實現控制翻轉,即把new instance 的工作交給了 ioc 容器,而不是程序員在一個方法中new 另一個。

    spring的工廠模式解耦,實際是將所有需要配置的類名,都寫進了配置文件,每個類在調用配置文件中的類名的時候,使用 forName().newInstance 函數來創建這個類的實例,給發出請求的類使用。

    https://www.cnblogs.com/yrstudy/p/6500982.html

    https://blog.csdn.net/Appleyk/article/details/77879073?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

 

Bean:可重用的組件

JavaBean: 用java編寫的可重用組件

javaBean > 實體類

servlet:小程序,是單例對象,只有一個

單例對象和多例對象:單例是一個類產生的一個對象。多例是從同一個類產生的多個不同的對象。

多例對象被創建多次,多次初始化,效率不如單例

在spring中,因爲 forName().newInstance 每次都會產生新對象,而很多情況,我們只需要單例,因此,用一個Map來存放創建的對象,稱之爲 容器

Ioc 控制翻轉:

左邊這種,一個類主動調用另一個類,使用 new 一個對象

右邊,這個類在找對象時,並非直接要對象,而是問工廠要,這個工程就是 BeanFactory.getBean,這種方式,將找對象的控制權力,發放給了自定義的工廠,或算法定義的工廠,則稱爲控制反轉。

控制反轉類似於貨幣的產生,左邊是一對一的資源交換,可能需要多次,而工廠或框架就類似於貨幣,實現一箇中間者的角色。只能削減依賴,不能完全解除,如果完全解除,兩個類變成了一個類,那就沒有存在兩個類的意義了。所以ioc的作用是解耦,降低程序間的依賴。

https://www.bilibili.com/video/BV1Sb411s7vP?p=15

Spring 中的 Ioc 配置:

 

步驟

    1.在resources下面創建 xml 配置文件,添加bean標籤,這個bean就是上文的工廠類,BeanFactory,只不過Spring化了

    

    2. 獲取到 Spring 的核心容器, 也就是上文的 Map,把 Bean 添加進去

Bean :

依賴注入:

    在配置文件(bean.xml)中添加bean,這個bean的作用是給某個類傳參並且實例化那個類。

1.一般不用的構造注入,因爲類必須使用帶參的構造函數,來讓bean注入初始化參數。

被注入的類:

注入的數據:

2.set方法注入:更常用

 

 

    

Spring 中的 Ioc 註解:

註解的功能與xml配置bean有重疊,創建對象的註解的目的就是將類實現反射並加入容器中,註解較爲簡單


 

如果容器中,只有一個value 和當前類所需的類型符合,則autowired 可以直接掏出這個值,不看key:

 

僅使用autowire時,如果容器中,有兩個 value 的類型都符合,則看key 的名稱,如果有key名稱一樣的,則取出這個bean,如果沒有則報錯。

qualfiler 和 autowire 組合使用,指定bean id, resouce = 前兩者的組合,直接指定id

註解的作用和xml配置文件是有大量重合的,如何用類的方法來代替xml配置文件,得使用到@Configration註解配置類

用配置類的方法去配置數據庫連接,注意註解

通過propertySource指定另外的屬性文件,將數據庫的信息抽離,導入

Spring整合Junit 用於單元測試,Spring爲了 測試,需導入 Spring-test 依賴

1.Spring單元測試的問題:

2.解決方案:

在測試時,讓junit 註解使用Spring的測試類

AOP:

動態代理:用客戶買電腦的例子,代理爲經銷商,被代理的是生產工廠。一個方法在調用另一個類的方法前,都會經過代理。

代理的作用,1. 把線程用完後放回線程池, 2.方法增強

在演示例子中是爲了service 層 調用 dao 層時,在同一個事務中的一套轉賬過程具有原子性的同時,減少繁瑣的代碼,實現兩層代碼的分離,減少依賴。 即減少下部分事務同步代碼的重複編寫。

面向切面可認爲是面向代理編程

 

代理商實現供應商(工廠)的接口,被稱爲基於接口的代理

調用cglib 創建代理類

Spring 中的 AOP:

實現方式還是動態代理,可以減少重複代碼,方便維護,spring中的aop是通過註解方式實現動態代理。

與oop面向對象編程比,子類中的每一個方法通過代理,減少重複代碼量,比如例子中,服務層每個函數在調用dao時,都要創建一個事務,但通過走代理,則只要直接調用dao層即可

連接點和切入點:

所有切入點是連接點,連接點是服務層一個類中所有方法,切入點只是被增強的方法。

幾種通知:

通知就是dao層調用的方法,在數據庫操作中就是crud

method.invoke():執行某方法

spring的aop配置:

例子是在一些方法前調用另一個類的logger方法

將通知和切入點方法關聯起來,需要使用pointcut屬性

對服務層所有類的所有方法都增強

實際開發中會指定類下所有方法進行增強

使用環繞通知時,如何保證切入點方法執行

環繞通知可以轉變爲其他三種通知,只需要根據你在原類中寫入的位置

基於註解的aop:

用註解+自己編寫類的方式,實現切面類,但四個通知執行順序會有問題,環繞通知沒這個問題,所以建議用註解方式

Spring中的JDBC Template:

在不用spring的方法時,在select時,要自己寫一個類,將查詢結果,以這種類的方式讀取出來

用spring的beanPropertyRowMapper則不需要自己編寫類,這個在實際開發中用的多

Spring的xml事務控制配置:

基於註解的spring事務控制器:

直接在業務層類或者方法上加Transactional註解,並先在bean.xml裏添加註解bean以啓用事務註解。

關注spring5.0新特性。響應式編程等

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

   

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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