一: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)入最基本的包?


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

????????第二步:創(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)建

四:Spring的bean管理(配置文件xml方式)
????????在Spring里面通過配置文件創(chuàng)建對(duì)象
????????(1)bean實(shí)例化的三種方式
? ? ? ? ? ? ? ? 1:使用類的無參數(shù)構(gòu)造創(chuàng)建(重點(diǎn))

? ? ? ? ? ? ? ? ? ? ? ? 類里面沒有無參數(shù)構(gòu)造,會(huì)拋異常
? ? ? ? ? ? ? ? 2:靜態(tài)工廠創(chuàng)建對(duì)象(很少用,麻煩)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 這里的class寫的是工廠(Bean2Factory)的全路徑;factory-mothod 寫工廠里面的方法



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



? ? ? ? (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)簽里面 ,例如:

? ? ? ? ? ? ? ? ? ? ? ? ?- 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填類的屬性,value填設(shè)置的值


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



? ? ? ? (5)Spring注入對(duì)象類型屬性(重點(diǎn))
? ? ? ? ? ? ? ? 1:創(chuàng)建service類和dao類
?? ? ? ? ? ? ? ? ? ? ? ?-????在service得到dao對(duì)象
? ? ? ? ? ? ? ? ?2:具體實(shí)現(xiàn)過程
? ? ? ? ? ? ? ? ? ? ? ? -? ? 在service里面把dao作為類型屬性
? ? ? ? ? ? ? ? ? ? ? ? -? ? 生成dao類型屬性的set方法?

? ? ? ? ? ? ? ? 3:在配置文件中完成注入
? ? ? ? ? ? ????????ref屬性填寫注入的對(duì)象

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

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


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


? ? ? ? (7)Spring注入復(fù)雜數(shù)據(jù) (很少用)
? ? ? ? ? ? ? ? ? ? - 寫類代碼





? ??(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包

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

? ? ? ? ? ? ? ? (3)指定加載Spring配置文件位置(如果不指定配置文件,就會(huì)報(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包

? ? ? ? (2)導(dǎo)入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):配置文件中開啟注解掃描

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


3:四種注解方式?
????????Spring 中提供@Component的三個(gè)衍生注釋:
????????@Controller? ? ?web層
????????@Service? ? ? ? 業(yè)務(wù)層
????????@Repository? ?持久層
????????四種方式功能是一樣的,Spring是為了方便以后擴(kuò)展功能
? ? ? ? (1)????@Controller
? ? ? ? (2)????@Service
????????????????其他都是一樣的方式,其中 value= 可以省略直接寫冒號(hào)里面的

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

5:注解注入屬性
? ? ? ? *????創(chuàng)建service類 和 dao類
? ? ? ????? ?對(duì)象注入的兩種注解方式
????????????????????????第一種是????@Autowired? ? 在下面創(chuàng)建serivce里面有例子
? ? ? ? ? ? ? ? ? ? ? ? 第二種是? ? @Resource(name="xxxx")? ? ?name屬性值是寫創(chuàng)建dao對(duì)象的注釋的value值,也就是需要制定注入哪一個(gè)對(duì)象

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

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

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


6:注釋和配置文件混合使用
? ? ? ? - 創(chuàng)建service類和dao類并注入屬性,注入方式使用的是注解的方式



? ? ? ? - 將對(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ù)語
? ? ? ? ? ? ? ? 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包

? ? ? ? ? ? (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)的約束

? ? ? ? 4:AOP操作
? ??



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í)別?

? ? ? ? ? ? ? ? ? ? (1)info:看到基本信息
? ? ? ? ? ? ? ? ? ? (2)debug:看到更詳細(xì)的信息
11:Spring整合web項(xiàng)目演示