一: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/ (如果覺(jué)得太慢也可以去國(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è)類(lèi),在類(lèi)里面有一個(gè)方法(不是static方法)盆驹,調(diào)用類(lèi)里面的方法就要?jiǎng)?chuàng)建類(lèi)的對(duì)象与倡,使用對(duì)象調(diào)用方法,創(chuàng)建類(lèi)對(duì)象的過(guò)程李请,對(duì)象需要new出來(lái)瞧筛;
? ? ? ? ? ? ? ? ? ? ? ? ?Spring:對(duì)象的創(chuàng)建不是通過(guò)new方式實(shí)現(xiàn),而是交給Spring配置創(chuàng)建類(lèi)的對(duì)象
? ? ? ? (2)AOP(面向切面):面向切面編程捻艳,擴(kuò)展功能不是修改源代碼實(shí)現(xiàn)
2:Spring的優(yōu)點(diǎn):
? ? ? ? (1)高內(nèi)聚低耦合驾窟,Spring就是一個(gè)大工廠(容器)庆猫,可以將所有對(duì)象創(chuàng)建和依賴(lài)關(guān)系維護(hù)
? ? ? ? (2)聲明式事務(wù)的支持:只需在配置文件聲明就可使用事務(wù)认轨,無(wú)需手動(dòng)編寫(xiě)代碼
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ā)展過(guò)程(圖一)
? ? ? ? ? ? ? ? ? ? ? ? ioc最終原理圖(圖二)
三:ioc入門(mén)案例
? ? ? ? 第一步:導(dǎo)入jar包
? ? ? ? ? ? ? ? ? ? (1)導(dǎo)入最基本的包?
? ? ? ? ? ? ? ? ? ? (2)導(dǎo)入輸入日志的jar包和一個(gè)必要的組件
????????第二步:創(chuàng)建類(lèi)嘁字,在類(lèi)里面創(chuàng)建方法
? ? ? ? 第三步:創(chuàng)建Spring配置文件,配置創(chuàng)建類(lèi)
? ? ? ? ? ? ? ? ? ? ? ? (1)Spring核心配置文件名稱(chēng)和位置不是固定的
? ? ? ? ? ? ? ? ? ? ? ? (2)引入schema約束
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?下載的框架里面找xsd-config.html 文件打開(kāi)?路徑:spring-framework-4.0.4.RELEASE\docs\spring-framework-reference\html\xsd-config.html
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 在頁(yè)面最后
????????????????????????(3)配置對(duì)象創(chuàng)建
? ? ? ? 第四步:寫(xiě)代碼測(cè)試對(duì)象創(chuàng)建
四:Spring的bean管理(配置文件xml方式)
????????在Spring里面通過(guò)配置文件創(chuàng)建對(duì)象
????????(1)bean實(shí)例化的三種方式
? ? ? ? ? ? ? ? 1:使用類(lèi)的無(wú)參數(shù)構(gòu)造創(chuàng)建(重點(diǎn))
? ? ? ? ? ? ? ? ? ? ? ? 類(lèi)里面沒(méi)有無(wú)參數(shù)構(gòu)造杉畜,會(huì)拋異常
? ? ? ? ? ? ? ? 2:靜態(tài)工廠創(chuàng)建對(duì)象(很少用纪蜒,麻煩)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 這里的class寫(xiě)的是工廠(Bean2Factory)的全路徑;factory-mothod 寫(xiě)工廠里面的方法
? ? ? ? ? ? ? ? ? ? 3:實(shí)例工廠創(chuàng)建對(duì)象(很少用,麻煩)
? ? ? ? (2)bean標(biāo)簽的常用屬性
? ? ? ? ? ? ? ? 1:id屬性:起名稱(chēng)此叠,id屬性名稱(chēng)任意命名
? ? ? ? ? ? ? ? ? ? ? ? ? ?- id屬性值纯续,不能包含特殊符號(hào)
? ? ? ? ? ? ? ? ? ? ? ? ? ?- 根據(jù)id值得到配置對(duì)象
? ? ? ? ? ? ? ? 2:class:創(chuàng)建對(duì)象所在了的全路徑
? ? ? ? ? ? ? ? 3:name:跟id的作用是一樣的,但是name屬性可以包含特殊符號(hào)
? ? ? ? ? ? ? ? 4:scope(范圍)屬性 灭袁,寫(xiě)在bean標(biāo)簽里面 猬错,例如:
? ? ? ? ? ? ? ? ? ? ? ? ?- 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)造
? ? ? ? ? ? ? ? ? ? ? ? ? xml配置软瞎,name填類(lèi)的屬性逢唤,value填設(shè)置的值
? ? ? ? ? ? ? ? ? ?2:set方法
? ? ? ? (5)Spring注入對(duì)象類(lèi)型屬性(重點(diǎn))
? ? ? ? ? ? ? ? 1:創(chuàng)建service類(lèi)和dao類(lèi)
?? ? ? ? ? ? ? ? ? ? ? ?-????在service得到dao對(duì)象
? ? ? ? ? ? ? ? ?2:具體實(shí)現(xiàn)過(guò)程
? ? ? ? ? ? ? ? ? ? ? ? -? ? 在service里面把dao作為類(lèi)型屬性
? ? ? ? ? ? ? ? ? ? ? ? -? ? 生成dao類(lèi)型屬性的set方法?
? ? ? ? ? ? ? ? 3:在配置文件中完成注入
? ? ? ? ? ? ????????ref屬性填寫(xiě)注入的對(duì)象
? ? ? ? ? ? ? ? ? 4:測(cè)試代碼
? ? ? ? (6)p名稱(chēng)空間注入(很少用)
? ? ? ? ? ? ? ? 1:引 入p名稱(chēng)空間
? ? ? ? ? ? ? ? ? ? p:類(lèi)里面的屬性名="填入值"? ?;例如:p:pname="lucy"
? ? ? ? (7)Spring注入復(fù)雜數(shù)據(jù) (很少用)
? ? ? ? ? ? ? ? ? ? - 寫(xiě)類(lèi)代碼
? ??(8)IOC和DI的區(qū)別
? ? ? ? 1:IOC:控制反轉(zhuǎn)涤浇,把對(duì)象的創(chuàng)建交給Spring進(jìn)行配置
? ? ? ? 2:DI:依賴(lài)注入鳖藕,向類(lèi)里面的屬性中設(shè)置值
? ? ? ? 3:關(guān)系:DI(依賴(lài)注入)不能單獨(dú)存在,需要在IOC的基礎(chǔ)上完成操作
? ? ?(9)Spring整合web項(xiàng)目原理
? ? ? ? ? ? ? ? (1)加載Spring核心配置文件
? ? ? ? ? ? ? ? ? ? ? ? ? ? ①:new對(duì)象只锭,功能可以實(shí)現(xiàn)著恩,效率很低
? ? ? ? ? ? ? ? ? ?(2)實(shí)現(xiàn)思想:把加載配置文件和創(chuàng)建對(duì)象的過(guò)程,在服務(wù)器啟動(dòng)時(shí)完成
? ? ? ? ? ? ? ? ? ?(3)實(shí)現(xiàn)原理:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ①:ServletContext對(duì)象
? ? ? ? ? ? ? ? ? ? ? ? ? ? ②:監(jiān)聽(tīng)器
? ? ? ? ? ? ? ? ? ? ? ? ? ? ③:具體使用
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? - 在服務(wù)器啟動(dòng)時(shí),為每個(gè)項(xiàng)目創(chuàng)建一個(gè)ServletContext對(duì)象
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? - 在ServletContext對(duì)象創(chuàng)建時(shí)页滚,使用監(jiān)聽(tīng)器可以具體到ServletContext對(duì)象在什么時(shí)候創(chuàng)建
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? - 使用監(jiān)聽(tīng)器監(jiān)聽(tīng)到ServletContext對(duì)象創(chuàng)建時(shí)拼苍,加載Spring配置文件,把配置文件配置對(duì)象創(chuàng)建
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? - 把創(chuàng)建的出來(lái)的對(duì)象放到ServletContext域?qū)ο罄锩妫╯erAttribute方法)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? - 獲取對(duì)象時(shí)候稍味,到ServletContext域得到(getAttribute方法)
? ? ? ? (10)Spring整合web項(xiàng)目演示
? ? ? ? ? ? ? ? (1)導(dǎo)入Spring整合web項(xiàng)目jar包
? ? ? ? ? ? ? ? (2)在web.xml配置文件里面配置監(jiān)聽(tīng)器
? ? ? ? ? ? ? ? (3)指定加載Spring配置文件位置(如果不指定配置文件婉弹,就會(huì)報(bào)錯(cuò))
? ? ? ? ? ? ? ? ? ? ? ? ? <param-name>標(biāo)簽的值是固定的
? ? ? ? ? ? ? ? ? ? ? ? ? <param-value>填配置文件的路徑,如果在src里面 直接寫(xiě):classpath:文件名稱(chēng).xml? ? ;如果在包里面幻林,就需要些詳細(xì)路徑:classpath:com.kk.文件名稱(chēng).xml
五:Spring的bean管理(注解方式)
注解:代碼里面特殊的標(biāo)記贞盯,使用注解可以完成功能
注解寫(xiě)法:@注解名稱(chēng)(屬性名稱(chēng)-屬性值)
注解使用在類(lèi)上面,方法上面沪饺,屬性上面
1:Spring注解開(kāi)發(fā)準(zhǔn)備
? ? ? ? (1)導(dǎo)入基本的jar包
? ? ? ? (2)導(dǎo)入aop的jar包
? ??????(3):創(chuàng)建Spring配置文件躏敢,引入約束
????????????????? ? (1)做ioc只需引入約束beans,但是做Spring的ioc注解開(kāi)發(fā)整葡,需要引入新的約束
? ????????????????? ? ? 約束路徑:spring-framework-4.0.4.RELEASE\docs\spring-framework-reference\html\xsd-config.html
? ? ? ?(4):配置文件中開(kāi)啟注解掃描
2:注解創(chuàng)建對(duì)象
3:四種注解方式?
????????Spring 中提供@Component的三個(gè)衍生注釋?zhuān)?/p>
????????@Controller? ? ?web層
????????@Service? ? ? ? 業(yè)務(wù)層
????????@Repository? ?持久層
????????四種方式功能是一樣的件余,Spring是為了方便以后擴(kuò)展功能
? ? ? ? (1)????@Controller
? ? ? ? (2)????@Service
????????????????其他都是一樣的方式,其中 value= 可以省略直接寫(xiě)冒號(hào)里面的
? ? ? ? (3)????@Repository
? ? ? ? (4)????@Component
4:創(chuàng)建對(duì)象單實(shí)例還是多實(shí)例
5:注解注入屬性
? ? ? ? *????創(chuàng)建service類(lèi) 和 dao類(lèi)
? ? ? ????? ?對(duì)象注入的兩種注解方式
????????????????????????第一種是????@Autowired? ? 在下面創(chuàng)建serivce里面有例子
? ? ? ? ? ? ? ? ? ? ? ? 第二種是? ? @Resource(name="xxxx")? ? ?name屬性值是寫(xiě)創(chuàng)建dao對(duì)象的注釋的value值遭居,也就是需要制定注入哪一個(gè)對(duì)象
? ? ? ? *? ? 創(chuàng)建service
? ? ? ? *? ? 創(chuàng)建dao類(lèi)
? ? ? ? *? ? 測(cè)試代碼
6:注釋和配置文件混合使用
? ? ? ? - 創(chuàng)建service類(lèi)和dao類(lèi)并注入屬性啼器,注入方式使用的是注解的方式
? ? ? ? - 將對(duì)象的創(chuàng)建交給配置文件
? ? ? ? ? ?- 測(cè)試
7:AOP原理
? ? ? ? (1) AOP概述
? ? ? ? ? ? ? ? AOP:面向切面(方面)編程,擴(kuò)展功能不修改源代碼實(shí)現(xiàn)
?????????????????AOP采取橫向抽取機(jī)制俱萍,取代了傳統(tǒng)縱向繼承體系重復(fù)性代碼
? ? ? ? (2)AOP底層原理
? ? ? ? (3)AOP操作相關(guān)術(shù)語(yǔ)
? ? ? ? ? ? ? ? 1:Joinpoint(連接點(diǎn)):類(lèi)里面的那些方法可以被增強(qiáng)端壳,這些方法稱(chēng)為連接點(diǎn)
? ? ? ? ? ? ? ? 2:Pointcut(切入點(diǎn))重點(diǎn):在類(lèi)里面可以有很多的方法被增強(qiáng),比如實(shí)際操作中枪蘑,只是增強(qiáng)了類(lèi)里面add方法和update方法损谦,實(shí)際增強(qiáng)的方法稱(chēng)為 切入點(diǎn)
? ? ? ? ? ? ? ? 3:Advice(通知/增強(qiáng)):增強(qiáng)的邏輯,稱(chēng)為增強(qiáng)岳颇,比如擴(kuò)展日志功能照捡,這個(gè)日志功能稱(chēng)為增強(qiáng),
? ? ? ? ? ? ? ? ? ? ? ? ? ? 前置通知:在方法之前執(zhí)行
? ? ? ? ? ? ? ? ? ? ? ? ? ? 后置通知:在方法之后執(zhí)行
? ? ? ? ? ? ? ? ? ? ? ? ? ? 異常通知:方法出現(xiàn)異常
? ? ? ? ? ? ? ? ? ? ? ? ? ? 最終通知:在后置之后執(zhí)行
? ? ? ? ? ? ? ? ? ? ? ? ? ? 環(huán)繞通知:在方法之前和之后執(zhí)行
? ? ? ? ? ? ? ? 4:切面:把增強(qiáng)應(yīng)用到具體方法上面赦役,過(guò)程稱(chēng)為切面
? ? ? ? ? ? ? ? ? ? ? ? ? ? 把增強(qiáng)用到切入點(diǎn)的過(guò)程
? ? ? ? ? ? ? ? 沒(méi)那么重要的術(shù)語(yǔ)
? ? ? ? ? ? ? ? 5:Introduction(引介):動(dòng)態(tài)添加功能或者屬性
? ? ? ? ? ? ? ? 6:Target(目標(biāo)對(duì)象):代理的目標(biāo)對(duì)象(要增強(qiáng)的類(lèi))
? ? ? ? ? ? ? ? 7:Weaving(織入):是把增強(qiáng)應(yīng)用到目標(biāo)的過(guò)程
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 把a(bǔ)dvice 應(yīng)用到target的過(guò)程
? ? ? ? ? ? ? ? 8:Proxy(代理):一個(gè)類(lèi)被AOP織入增強(qiáng)后麻敌,就產(chǎn)生一個(gè)結(jié)果代理類(lèi)
8:使用表達(dá)式配置切入點(diǎn)
? ? ? ? (1):切入點(diǎn):實(shí)際增強(qiáng)的方法
? ? ? ? (2):常用的表達(dá)式
? ? ? ? ? ? ? ? ? ?execution(<訪問(wèn)修飾符public,private掂摔,...>?<返回類(lèi)型><方法名>(<參數(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)所有類(lèi)的所有方法术羔;
? ??????????????????4:execution(* abc*(傳參))
? ??????????????????????? 表示的是:匹配所有abc開(kāi)頭的方法進(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包
? ? ? ? ? ? (2)創(chuàng)建一個(gè)Spring的核心配置文件,導(dǎo)入約束
? ??????????????????? 約束路徑:spring-framework-4.0.4.RELEASE\docs\spring-framework-reference\html\xsd-config.html
? ? ? ? ? ? ? ? ? ? ? ?打開(kāi)網(wǎng)頁(yè)叭披,找到 AOP相關(guān)的約束
? ? ? ? 4:AOP操作
? ??
10:Log4j介紹
? ? ? ? 1:通過(guò)log4j可以看到程序運(yùn)行的過(guò)程中更詳細(xì)的信息
? ? ? ? ? ? ? ? (1)經(jīng)常使用Log4j查看日志?
? ? ? ? 2:Log4j的使用
? ? ? ? ? ? ? ? (1)導(dǎo)入log4j的jar包
? ? ? ? ? ? ? ? (2)復(fù)制Log4j的配置文件寥殖,到src下面
? ? ? ? ?3:可以設(shè)置日志級(jí)別?
? ? ? ? ? ? ? ? ? ? (1)info:看到基本信息
? ? ? ? ? ? ? ? ? ? (2)debug:看到更詳細(xì)的信息
11:Spring整合web項(xiàng)目演示