Spring框架筆記

一:Spring概念介紹

下載Spring框架?spring-framework-4.0.4.RELEASE-dist,4.0.4版官方地址為?http://repo.springsource.org/libs-release-local/org/springframework/spring/4.0.4.RELEASE/ (如果覺得太慢也可以去國(guó)內(nèi)網(wǎng)站下載)

此外,還需要下載一個(gè)必要組件commons-logging-1.1.3-bin?,可以在http://commons.apache.org/官網(wǎng)下載也可以在國(guó)內(nèi)網(wǎng)站下載。

1:Spring的核心

? ? ? ? (1)IOC(控制反轉(zhuǎn)):

? ? ? ? ? ? ? ? ? ? ? ? ?比如以前:有一個(gè)類,在類里面有一個(gè)方法(不是static方法),調(diào)用類里面的方法就要?jiǎng)?chuàng)建類的對(duì)象,使用對(duì)象調(diào)用方法,創(chuàng)建類對(duì)象的過程,對(duì)象需要new出來;

? ? ? ? ? ? ? ? ? ? ? ? ?Spring:對(duì)象的創(chuàng)建不是通過new方式實(shí)現(xiàn),而是交給Spring配置創(chuàng)建類的對(duì)象


? ? ? ? (2)AOP(面向切面):面向切面編程,擴(kuò)展功能不是修改源代碼實(shí)現(xiàn)


2:Spring的優(yōu)點(diǎn)

? ? ? ? (1)高內(nèi)聚低耦合,Spring就是一個(gè)大工廠(容器),可以將所有對(duì)象創(chuàng)建和依賴關(guān)系維護(hù)

? ? ? ? (2)聲明式事務(wù)的支持:只需在配置文件聲明就可使用事務(wù),無需手動(dòng)編寫代碼

3:Spring是一站式框架

? ? ? ? (1)Spring在JavaEE三層架構(gòu)中,每一層都提供不同的解決技術(shù)

? ? ? ? ? ? ? ? - web層:SpringMVC

? ? ? ? ? ? ? ? - service層:Spring的ioc

? ? ? ? ? ? ? ? - dao層,Spring 的jdbcTemplate


二:Spring的ioc底層原理

1:把對(duì)象的創(chuàng)建交給Spring進(jìn)行管理

2:ioc操作部分

? ? ? ? (1)ioc的配置文件方式

? ? ? ? (2)ioc的注解方式

? ? ? ? (3)ioc底層原理

? ? ? ? ? ? ? ? ?1:底層實(shí)用技術(shù):

? ? ? ? ? ? ? ? ? ? ?(1)xml配置文件

? ? ? ? ? ? ? ? ? ? ?(2)dom4j解決xml

? ? ? ? ? ? ? ? ? ? ?(3)工廠設(shè)計(jì)模式

? ? ? ? ? ? ? ? ? ? ?(4)反射

? ? ? ? ? ? ? ? ? 2:原理圖

? ? ? ? ? ? ? ? ? ? ? ? 發(fā)展過程(圖一)

? ? ? ? ? ? ? ? ? ? ? ? ioc最終原理圖(圖二)

原理圖



三:ioc入門案例

? ? ? ? 第一步:導(dǎo)入jar包

? ? ? ? ? ? ? ? ? ? (1)導(dǎo)入最基本的包?

基礎(chǔ)jar目錄

? ? ? ? ? ? ? ? ? ? (2)導(dǎo)入輸入日志的jar包和一個(gè)必要的組件


jar目錄



????????第二步:創(chuàng)建類,在類里面創(chuàng)建方法

? ? ? ? 第三步:創(chuàng)建Spring配置文件,配置創(chuàng)建類

? ? ? ? ? ? ? ? ? ? ? ? (1)Spring核心配置文件名稱和位置不是固定的

? ? ? ? ? ? ? ? ? ? ? ? (2)引入schema約束

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?下載的框架里面找xsd-config.html 文件打開?路徑:spring-framework-4.0.4.RELEASE\docs\spring-framework-reference\html\xsd-config.html

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 在頁面最后

????????????????????????(3)配置對(duì)象創(chuàng)建


? ? ? ? 第四步:寫代碼測(cè)試對(duì)象創(chuàng)建

測(cè)試代碼



四:Spring的bean管理(配置文件xml方式)

????????在Spring里面通過配置文件創(chuàng)建對(duì)象

????????(1)bean實(shí)例化的三種方式

? ? ? ? ? ? ? ? 1:使用類的無參數(shù)構(gòu)造創(chuàng)建(重點(diǎn))


xml配置

? ? ? ? ? ? ? ? ? ? ? ? 類里面沒有無參數(shù)構(gòu)造,會(huì)拋異常

? ? ? ? ? ? ? ? 2:靜態(tài)工廠創(chuàng)建對(duì)象(很少用,麻煩)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 這里的class寫的是工廠(Bean2Factory)的全路徑;factory-mothod 寫工廠里面的方法

xml配置
靜態(tài)工廠類代碼
測(cè)試代碼

? ? ? ? ? ? ? ? ? ? 3:實(shí)例工廠創(chuàng)建對(duì)象(很少用,麻煩)

xml配置
工廠代碼
測(cè)試代碼

? ? ? ? (2)bean標(biāo)簽的常用屬性

? ? ? ? ? ? ? ? 1:id屬性:起名稱,id屬性名稱任意命名

? ? ? ? ? ? ? ? ? ? ? ? ? ?- id屬性值,不能包含特殊符號(hào)

? ? ? ? ? ? ? ? ? ? ? ? ? ?- 根據(jù)id值得到配置對(duì)象

? ? ? ? ? ? ? ? 2:class:創(chuàng)建對(duì)象所在了的全路徑

? ? ? ? ? ? ? ? 3:name:跟id的作用是一樣的,但是name屬性可以包含特殊符號(hào)

? ? ? ? ? ? ? ? 4:scope(范圍)屬性 ,寫在bean標(biāo)簽里面 ,例如:

xml配置圖

? ? ? ? ? ? ? ? ? ? ? ? ?- singleton? ? :默認(rèn)值,單例的(對(duì)象只會(huì)創(chuàng)建一次)

? ? ? ? ? ? ? ? ? ? ? ? ?- prototype? ? :多例的(每次創(chuàng)建對(duì)象都是一個(gè)新的對(duì)象)

? ? ? ? ? ? ? ? ? ? ? ? ?-??request? ? ? :創(chuàng)建對(duì)象放到request域里面? ??

? ?? ? ? ? ? ? ? ? ? ? ? -? session?? ? ?:?創(chuàng)建對(duì)象放到session域里面? ?

? ?? ? ? ? ? ? ? ? ? ? ? -? globalSession(全局Session):創(chuàng)建對(duì)象放到globalSession域里面? ?

? ? ? ? (3)屬性注入方式介紹

? ? ? ? ? ? ? ? 屬性注入:創(chuàng)建對(duì)象的時(shí)候,向?qū)ο髮傩岳锩嬖O(shè)置值,就叫做屬性注入

? ? ? ? ? ? ? ? 1:屬性注入的三種方式

? ? ? ? ? ? ? ? ? ? ? ? (1) -?使用屬性的set方法

? ? ? ? ? ? ? ? ? ? ????(2) - 用有參構(gòu)造注入

? ? ? ? ? ? ? ? ? ? ? ? (3) - 使用接口方式注入(很少用)

? ???????????????????????在Spring中,只支持set方法注入有參構(gòu)造注入


三種屬性注入方式


? ? ? ? (4)Spring注入屬性(有參構(gòu)造和set方法)?

? ? ? ? ? ? ? ? 1:有參構(gòu)造


有參構(gòu)造方法

? ? ? ? ? ? ? ? ? ? ? ? ? xml配置,name填類的屬性,value填設(shè)置的值

xml配置圖



測(cè)試代碼

? ? ? ? ? ? ? ? ? ?2:set方法

類代碼
xml配置
測(cè)試代碼

? ? ? ? (5)Spring注入對(duì)象類型屬性(重點(diǎn))

? ? ? ? ? ? ? ? 1:創(chuàng)建service類和dao類

?? ? ? ? ? ? ? ? ? ? ? ?-????在service得到dao對(duì)象

? ? ? ? ? ? ? ? ?2:具體實(shí)現(xiàn)過程

? ? ? ? ? ? ? ? ? ? ? ? -? ? 在service里面把dao作為類型屬性

? ? ? ? ? ? ? ? ? ? ? ? -? ? 生成dao類型屬性的set方法?

具體實(shí)現(xiàn)代碼

? ? ? ? ? ? ? ? 3:在配置文件中完成注入

? ? ? ? ? ? ????????ref屬性填寫注入的對(duì)象

xml配置圖

? ? ? ? ? ? ? ? ? 4:測(cè)試代碼

測(cè)試代碼


? ? ? ? (6)p名稱空間注入(很少用)

? ? ? ? ? ? ? ? 1:引 入p名稱空間


xml引入圖


類代碼圖?

? ? ? ? ? ? ? ? ? ? p:類里面的屬性名="填入值"? ?;例如:p:pname="lucy"

xml配置圖


測(cè)試代碼


? ? ? ? (7)Spring注入復(fù)雜數(shù)據(jù) (很少用)

? ? ? ? ? ? ? ? ? ? - 寫類代碼


類代碼?
String[] arrs配置圖1


List<String>? list配置圖


map和properties配置圖


?測(cè)試代碼

? ??(8)IOC和DI的區(qū)別

? ? ? ? 1:IOC:控制反轉(zhuǎn),把對(duì)象的創(chuàng)建交給Spring進(jìn)行配置

? ? ? ? 2:DI:依賴注入,向類里面的屬性中設(shè)置值

? ? ? ? 3:關(guān)系:DI(依賴注入)不能單獨(dú)存在,需要在IOC的基礎(chǔ)上完成操作


? ? ?(9)Spring整合web項(xiàng)目原理

? ? ? ? ? ? ? ? (1)加載Spring核心配置文件

? ? ? ? ? ? ? ? ? ? ? ? ? ? ①:new對(duì)象,功能可以實(shí)現(xiàn),效率很低

? ? ? ? ? ? ? ? ? ?(2)實(shí)現(xiàn)思想:把加載配置文件和創(chuàng)建對(duì)象的過程,在服務(wù)器啟動(dòng)時(shí)完成

? ? ? ? ? ? ? ? ? ?(3)實(shí)現(xiàn)原理:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ①:ServletContext對(duì)象

? ? ? ? ? ? ? ? ? ? ? ? ? ? ②:監(jiān)聽器

? ? ? ? ? ? ? ? ? ? ? ? ? ? ③:具體使用

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? - 在服務(wù)器啟動(dòng)時(shí),為每個(gè)項(xiàng)目創(chuàng)建一個(gè)ServletContext對(duì)象

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? - 在ServletContext對(duì)象創(chuàng)建時(shí),使用監(jiān)聽器可以具體到ServletContext對(duì)象在什么時(shí)候創(chuàng)建

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? - 使用監(jiān)聽器監(jiān)聽到ServletContext對(duì)象創(chuàng)建時(shí),加載Spring配置文件,把配置文件配置對(duì)象創(chuàng)建

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? - 把創(chuàng)建的出來的對(duì)象放到ServletContext域?qū)ο罄锩妫╯erAttribute方法)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? - 獲取對(duì)象時(shí)候,到ServletContext域得到(getAttribute方法)

? ? ? ? (10)Spring整合web項(xiàng)目演示

? ? ? ? ? ? ? ? (1)導(dǎo)入Spring整合web項(xiàng)目jar包

jar包

? ? ? ? ? ? ? ? (2)在web.xml配置文件里面配置監(jiān)聽器

監(jiān)聽器配置

? ? ? ? ? ? ? ? (3)指定加載Spring配置文件位置(如果不指定配置文件,就會(huì)報(bào)錯(cuò))

報(bào)錯(cuò)圖

? ? ? ? ? ? ? ? ? ? ? ? ? <param-name>標(biāo)簽的值是固定的

? ? ? ? ? ? ? ? ? ? ? ? ? <param-value>填配置文件的路徑,如果在src里面 直接寫:classpath:文件名稱.xml? ? ;如果在包里面,就需要些詳細(xì)路徑:classpath:com.kk.文件名稱.xml

指定配置文件位置

五:Spring的bean管理(注解方式)

注解:代碼里面特殊的標(biāo)記,使用注解可以完成功能

注解寫法:@注解名稱(屬性名稱-屬性值)

注解使用在類上面,方法上面,屬性上面

1:Spring注解開發(fā)準(zhǔn)備

? ? ? ? (1)導(dǎo)入基本的jar包


Spring基本jar包

? ? ? ? (2)導(dǎo)入aop的jar包

aop的jar包

? ??????(3):創(chuàng)建Spring配置文件,引入約束

????????????????? ? (1)做ioc只需引入約束beans,但是做Spring的ioc注解開發(fā),需要引入新的約束

? ????????????????? ? ? 約束路徑:spring-framework-4.0.4.RELEASE\docs\spring-framework-reference\html\xsd-config.html

約束圖片

? ? ? ?(4):配置文件中開啟注解掃描

xml


2:注解創(chuàng)建對(duì)象


創(chuàng)建對(duì)象圖


?測(cè)試代碼

3:四種注解方式?

????????Spring 中提供@Component的三個(gè)衍生注釋:

????????@Controller? ? ?web層

????????@Service? ? ? ? 業(yè)務(wù)層

????????@Repository? ?持久層

????????四種方式功能是一樣的,Spring是為了方便以后擴(kuò)展功能

? ? ? ? (1)????@Controller

? ? ? ? (2)????@Service

????????????????其他都是一樣的方式,其中 value= 可以省略直接寫冒號(hào)里面的

@Service注解圖

? ? ? ? (3)????@Repository

? ? ? ? (4)????@Component



4:創(chuàng)建對(duì)象單實(shí)例還是多實(shí)例


實(shí)例圖

5:注解注入屬性

? ? ? ? *????創(chuàng)建service類 和 dao類

? ? ? ????? ?對(duì)象注入的兩種注解方式

????????????????????????第一種是????@Autowired? ? 在下面創(chuàng)建serivce里面有例子

? ? ? ? ? ? ? ? ? ? ? ? 第二種是? ? @Resource(name="xxxx")? ? ?name屬性值是寫創(chuàng)建dao對(duì)象的注釋的value值,也就是需要制定注入哪一個(gè)對(duì)象

注入對(duì)象第二種示例

? ? ? ? *? ? 創(chuàng)建service


Service類創(chuàng)建

? ? ? ? *? ? 創(chuàng)建dao類


Dao類創(chuàng)建

? ? ? ? *? ? 測(cè)試代碼

測(cè)試代碼
效果

6:注釋和配置文件混合使用

? ? ? ? - 創(chuàng)建service類和dao類并注入屬性,注入方式使用的是注解的方式

service類創(chuàng)建
dao類創(chuàng)建
dao類創(chuàng)建

? ? ? ? - 將對(duì)象的創(chuàng)建交給配置文件

xml配置文件創(chuàng)建對(duì)象

? ? ? ? ? ?- 測(cè)試

測(cè)試代碼
打印的效果


7:AOP原理

? ? ? ? (1) AOP概述

? ? ? ? ? ? ? ? AOP:面向切面(方面)編程,擴(kuò)展功能不修改源代碼實(shí)現(xiàn)

?????????????????AOP采取橫向抽取機(jī)制,取代了傳統(tǒng)縱向繼承體系重復(fù)性代碼

? ? ? ? (2)AOP底層原理

原始縱向機(jī)制
aop原理

? ? ? ? (3)AOP操作相關(guān)術(shù)語

? ? ? ? ? ? ? ? 1:Joinpoint(連接點(diǎn)):類里面的那些方法可以被增強(qiáng),這些方法稱為連接點(diǎn)

? ? ? ? ? ? ? ? 2:Pointcut(切入點(diǎn))重點(diǎn):在類里面可以有很多的方法被增強(qiáng),比如實(shí)際操作中,只是增強(qiáng)了類里面add方法和update方法,實(shí)際增強(qiáng)的方法稱為 切入點(diǎn)

? ? ? ? ? ? ? ? 3:Advice(通知/增強(qiáng)):增強(qiáng)的邏輯,稱為增強(qiáng),比如擴(kuò)展日志功能,這個(gè)日志功能稱為增強(qiáng),

? ? ? ? ? ? ? ? ? ? ? ? ? ? 前置通知:在方法之前執(zhí)行

? ? ? ? ? ? ? ? ? ? ? ? ? ? 后置通知:在方法之后執(zhí)行

? ? ? ? ? ? ? ? ? ? ? ? ? ? 異常通知:方法出現(xiàn)異常

? ? ? ? ? ? ? ? ? ? ? ? ? ? 最終通知:在后置之后執(zhí)行

? ? ? ? ? ? ? ? ? ? ? ? ? ? 環(huán)繞通知:在方法之前和之后執(zhí)行

? ? ? ? ? ? ? ? 4:切面:把增強(qiáng)應(yīng)用到具體方法上面,過程稱為切面

? ? ? ? ? ? ? ? ? ? ? ? ? ? 把增強(qiáng)用到切入點(diǎn)的過程

? ? ? ? ? ? ? ? 沒那么重要的術(shù)語

? ? ? ? ? ? ? ? 5:Introduction(引介):動(dòng)態(tài)添加功能或者屬性

? ? ? ? ? ? ? ? 6:Target(目標(biāo)對(duì)象):代理的目標(biāo)對(duì)象(要增強(qiáng)的類)

? ? ? ? ? ? ? ? 7:Weaving(織入):是把增強(qiáng)應(yīng)用到目標(biāo)的過程

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 把a(bǔ)dvice 應(yīng)用到target的過程

? ? ? ? ? ? ? ? 8:Proxy(代理):一個(gè)類被AOP織入增強(qiáng)后,就產(chǎn)生一個(gè)結(jié)果代理類


8:使用表達(dá)式配置切入點(diǎn)

? ? ? ? (1):切入點(diǎn):實(shí)際增強(qiáng)的方法

? ? ? ? (2):常用的表達(dá)式

? ? ? ? ? ? ? ? ? ?execution(<訪問修飾符public,private,...>?<返回類型><方法名>(<參數(shù)>)<異常>)

? ? ? ? ? ? ? ? ? ?1:例如:execution(* net.kuniu.controller.UserDao.text(傳參))

? ? ? ? ? ? ? ? ? ? ? ? 表示的是:增強(qiáng)net.kuniu.controller.UserDao 里面的test() 方法

? ? ? ? ? ? ? ? ? ? 2:execution(* net.kuniu.controller.UserDao.*(傳參))

? ??????????????????????? 表示的是:增強(qiáng)net.kuniu.controller.UserDao 里面的所有方法

? ? ? ? ? ? ? ? ? ? 3:execution(* *.*(傳參))

? ??????????????????????? 表示的是:增強(qiáng)所有類的所有方法;

? ??????????????????4:execution(* abc*(傳參))

? ??????????????????????? 表示的是:匹配所有abc開頭的方法進(jìn)行增強(qiáng);


9:Spring的AOP操作

? ? ? ? 1:在Spring里面進(jìn)行AOP操作,使用aspectj實(shí)現(xiàn)對(duì)AOP的操作

? ? ? ? ? ?(1):Aspectj是一個(gè)面向切面的框架

? ? ? ? ? ?(2):Spring2.0以后新增了對(duì)AspectJ的支持

? ? ? ? 2:使用AspectJ實(shí)現(xiàn)AOP有兩種方式

? ? ? ? ? ? (1)基于aspectj的xml配置

? ? ? ? ? ? (2)基于aspectj的注解方式

? ? ? ? 3:AOP操作準(zhǔn)備

? ? ? ? ? ? (1)除了導(dǎo)入最基本的jar包,還需要導(dǎo)入AOP相關(guān)的jar包


jar包目錄

? ? ? ? ? ? (2)創(chuàng)建一個(gè)Spring的核心配置文件,導(dǎo)入約束

? ??????????????????? 約束路徑:spring-framework-4.0.4.RELEASE\docs\spring-framework-reference\html\xsd-config.html

? ? ? ? ? ? ? ? ? ? ? ?打開網(wǎng)頁,找到 AOP相關(guān)的約束

AOP約束圖片


? ? ? ? 4:AOP操作

? ??

方法代碼?


xml配置圖


xml配置圖



10:Log4j介紹

? ? ? ? 1:通過log4j可以看到程序運(yùn)行的過程中更詳細(xì)的信息

? ? ? ? ? ? ? ? (1)經(jīng)常使用Log4j查看日志?

? ? ? ? 2:Log4j的使用

? ? ? ? ? ? ? ? (1)導(dǎo)入log4j的jar包

? ? ? ? ? ? ? ? (2)復(fù)制Log4j的配置文件,到src下面

配置文件名稱

? ? ? ? ?3:可以設(shè)置日志級(jí)別?


級(jí)別設(shè)置位置

? ? ? ? ? ? ? ? ? ? (1)info:看到基本信息

? ? ? ? ? ? ? ? ? ? (2)debug:看到更詳細(xì)的信息



11:Spring整合web項(xiàng)目演示

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容