今日分享開始啦,請大家多多指教~

第一章:認識Spring
Spring認識框架
spring全家桶: spring ,springmvc,spring boot,spring cloud
spring:出現在2002左右,解決企業開發的難度,減輕對項目模塊之間的管理。
類和類之間的管理,幫助開發人員創建對象,管理對象之間的關係。
spring核心技術ioc ,aop 。能實現模塊之間,類之間的解耦合。
依賴: classa中使用classb的屬性或者方法,叫做classa依賴classb。
Spring框架內部模塊

第二章 IoC控制反轉
IoC概念
框架怎麼學:框架是一個軟件,是其它人寫好的軟件。知道框架能幹啥, 具體的使用步要就行。
1)知道框架能做什麼,mybatis–訪問數據庫, 對表中的數據執行增刪改查。
2)框架的語法,框架要完成一個功能,需要一定的步驟支持的。
3)框架的內部實現,框架內部怎麼做,原理是什麼。
4)通過學習,可以實現一個框架。
spring的第一個核心功能ioc
IOC (Inversion of Control) :控制反轉,是一個理論,概念,思想。
描述的:把對象的創建,賦值,管理工作都交給代碼之外的容器實現,也就是對象的創建是有其它外部資源完成。
控制:創建對象,對象的屬性賦值,對象之間的關係管理。
反轉:把原來的開發人員管理,創建對象的權限轉移給代碼之外的容器實現。由容器代替開發人員管理對象。創建對象,給屬性賦值。
正轉:由開發人員在代碼中,使用new構造方法創建對象,開發人員主動管理對象。
public static void main(string args[]){
student student – new Student();//在代碼中, 創建對象。–正轉。
}
容器:是一個服務器軟件,一 個框架(spring)
為什麼要使用ioc :目的就是減少對代碼的改動,也能實現不同的功能。實現解耦合。
創建對象的方式
為什麼要使用ioc :目的就是減少對代碼的改動,也能實現不同的功能。實現解耦合。
java中創建對象有哪些方式:
1.構造方法,new student ( )
2.反射
3.序列化
4.克隆
5.ioc。容器創建對象
6.動態代理,利用反射機制在運行時創建代理類。
IoC的實現技術
ioc的體現:
servlet
1.創建類繼承HttpServelt
2.web.xml 註冊 servlet ,使用<servlet-name> myservlet </ servlet-name>
<servelt-class>com.
bjpwernode.controller.MyServlet1</servlet-class>
3.沒有創建Servlet對象,沒有 MyServlet myservlet = new MyServlet ()
4. Servlet是Tomcat服務器它能你創建的。Tomcat也稱為容器。
Tomcat作為容器:裡面存放的有Servlet對象,Listener ,Fil ter對象
IoC的技術實現
DT是inc的技術實現
DI ( Dependency Injection) : 依賴注入,只需要在程序中提供要使用的對象名稱就可以,至
賦值,查找都由容器內部實現。
spring是使用的di實現了ioc的功能,spring底層創建對象,使用的是反射機制。
第一個例子創建對象

創建spring配置文件

創建容器對象ApplicaitonContext【拿到spring創建的對象】


spring創建對象的時機

獲取容器中對象信息的api


創建非自定義對象


設值注入概念【注入就是賦值】
ch02-di-xml:在spring的配置文件中,給java對象的屬性賦值。
di:依賴注入,表示創建對象,給屬性賦值。
di的實現有兩種:
1.在spring的配置文件中,使用標籤和屬性完成,叫做基於XML的di實現。
2.使用spring中的註解,完成屬性賦值,叫做基於註解的id實現。
di的語法分類:
1. set注入(設置注入) : spring調用類的set方法,在set方法可以實現屬性的賦值。
80左右都是使用的set注入。
2.構造注入,spring調用類的有參數構造方法,創建對象。在構造方法中完成賦值。

簡單類型的設值注入實現



單元測試junit
就是因為在main文件中測試不方便,不能獨立測試每一個方法,所以提出單元測試。

junit :單元測試,一個工具類庫,做測試方法使用的。
單元:指定的是方法,一個類中有很多方法,一個方法稱為單元。
使用單元測試
1.需要加入junit依賴。
<dependency>
<groupId>junit</groupId>
<arti factId> junit </arti factId><version>4.11</version>
<scope>test</ scope>
</ dependency>
2.創建測試作用的類:叫做測試類
src/ test/java目錄中創建類
3.創建測試方法
1) public玩法
2)沒有返回值void
3)方法名稱自定義,建議名稱是test +你要測試萬法名稱
4)方法沒有參數
5)方法的上面加入@Test,這樣的方法是可以單獨執行的。不用使用main方法。
設值注入【set注入】的注意事項


設值注入只是使用set方法

xml文件規定,所有的屬性必須放在引號中,int類型的數據也一樣。
設值注入也可以給別人寫的類進行賦值,只要有對用的set方法就行。
引用類型的設值注入


構造注入
構造注入是指,在構造調用者實例的同時,完成被調用者的實例化。即使用構造器設置依賴關係。



還可以省略index。
構造注入創建文件對象


複習第一天內容【思維導圖】


IoC作業


自動注入byName
簡化對於引用類型的重複賦值,減少冗餘。



自動注入byType
2. byType(按類型注入) : java類中引用類型的數據類型和spring容器中(配置文件) <bean>的class是同源關係的,這樣的bean能夠賦值給引用類型。
同源就是一類的意思:
1.java類中引用類型的數據類型和bean的class的值是樣的。
2.java類中引用類型的數據類型和bean的class的值父子類關係的。
3.java類中引用類型的數據類型和bean的class的值接口和實現類關係的
語法:
<bean id=”xx” class=”yyy” autowire= “byType”>
簡單類型屬性賦值
</bean>
為什麼使用多配置文件
大型項目中,需要多個配置文件。
多個配置優勢
1.每個文件的大小比一個文件要小很多,效率高。
2.避免多入競爭帶來的衝突。
如果你的項目有多個模塊(相關的功能在一起),一個模塊一個配置文件。
學生考勤模塊一個配置文件,張三
學生成績一個配置文件,李四
多文件的分配方式:
1.按功能模塊,一個模塊一個配置文件
2.按類的功能,數據庫相關的配置一個文件配置文件,做事務的功能一個配置文件,做service功能的一個配置文件等。
包含關係的配置文件





註解的使用步驟
基於註解的di:通過註解完成java對象創建,屬性賦值。
使用註解的步驟:
1.加入maven的依賴spring-context ,在你加入spring- context的同時,間接加入spring- aop的依賴,使用註解必須使用spring-aop依賴。
2.在類中加入spring的註解(多個不同功能的註解)
3.在spring的配置文件中,加入一個組件掃描器的標籤,說明註解在你的項目中的位置。
學習的註解:
1.@Component
2.@Respotory
3.@service
4.@Controller
5.@value
6.@Autowired
7.@Resource
Component註解使用



組件掃描器




多註解項目分層



@Component(value = “myStudent “)等同於
<bean id= “myStudent” class=”com.bjpowernode.ba01.Student” />
spring中和@Component功能一致,創建對象的註解還有:
1. @Repository (用在持久層類的上面) :放在da的實現類上面,表示創建dao對象,dao對象是能訪問數據庫的。
2.@Service(用在業務層類的上面) :放在service的實現類上面,創建service對象,service對象是做業務處理,可以有事務等功能的。
3. @Controller(用在控制器的上面) :放在控制器(處理器)類的上面,創建控制器對象的,控制器對象,能夠接受用戶提交的參數,顯示請求的處理結果。
以上三個註解的使用語法和@Component 一樣的。都能創建對象,但是這三個註解還有額外的功能。
@Repository,@service , @Controller 是給項目的對象分層的。
不清楚要用上面三個註解的情況就用@Component。
掃描多個包的方法

簡單類型屬性賦值

引用類型屬性賦值AutoWired自動注入,使用byType



步驟:首先掃描配置文件ApplicaitonContext,使用組件掃描器掃描base-package,創建包中所有對象,根據其中的註解注入【賦值】。

引用類型屬性賦值AutoWired自動注入,使用byName


比較


引用類型AutoWired的required屬性
引用類型
@Autowired:spring 框架提供的註解,實現引用類型的賦值。
spring中通過註解給引用類型賦值,使用的是自動注入原理, 支持byName, byType。
@Autowired:默認使用的是byType自動注入。
屬性:required,是 一個boolean類型的,默認true。
required=true :表示引用類型賦值失敗,程序報錯,並終止執行。
required=false :引用類型如果賦值失敗,程序正常執行,引用類型是null。
引用類型AutoWired的required屬性推薦使用默認值true
使用true, 儘早解決程序中的問題,報錯。
引用類型Resource
Resource是來自於JDK中的註解,不是來自於spring的。
引用類型
@Resource:來自jdk中的註解,spring框架提供J對這個註解的功能支持,可以使用它給引用類型賦值。使用的也是自動注入原理,支持byName ,byType ,默認是byName。
位置: 1. 在屬性定義的上面,無需set方法,推薦使用。
2.在set方法的上面
//默認是byNamel
@Resource

xml配置文件和註解的對比
經常改的就是使用xml配置文件、不經常改的就使用註解。
註解為主,配置文件為輔

複習【控制反轉】


複習動態代理的實現方式
使用動態代理的目的是在不改變原先類的基礎上,對其進行功能增強。
JDK 動態代理
動態代理的實現方式常用的有兩種:使用JDK的Proxy,與通過CGLIB生成代理。Jdk的動態要求目標對象必須實現接口,這是java設計上的要求。
從jdk1.3以來,java 語言通過java.lang.reflect 包提供三個類支持代理模式Proxy,Method 和InovcationHandler。
CGLIB動態代理(了解)
CGLIB的要求更低
CGLIB(Code Generation Library)是一個開源項目。是一個強大的,高性能,高質量的Code生成類庫,它可以在運行期擴展Java 類與實現Java接口。它廣泛地被許多AOP的框架使用,例如Spring AOP。
使用JDK 的Proxy 實現代理,要求目標類與代理類實現相同的接口。若目標類不存在接口,則無法使用該方式實現。但對於無接口的類,要為其創建動態代理,就要使用CGLIB來實現。.
CGLIB代理的生成原理是生成目標類的子類,而子類是增強過的,這個子類對象就是代理對象。所以,使用CGLIB生成動態代理,要求目標類必須能夠被繼承,即不能是final 的類。
CGLIB經常被應用在框架中,例如Spring ,Hibernate等。cglib 的代理效率高於Jdk。項目中直接使用動態代理的地方不多。一般都使用框架提供的功能。
用註解實現Ioc作業
1、加入依賴
2、創建類,在類中加入註解
3、聲名組件掃描器
使用動態代理實現一個功能增強



今日份分享已結束,請大家多多包涵和指點!
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/205539.html