Spring

-Spring
[圖片上傳中管引。士败。。(1)]

導(dǎo)包:
4個(gè)必須的包褥伴,logging(這個(gè)包是阿帕奇下面的那個(gè))
日志包C:\Users\Administrator\Desktop\day100\jar包\JAR包\spring3\spring-framework-3.0.2.RELEASE-dependencies\org.apache.log4j\com.springsource.org.apache.log4j\1.2.15
以上5個(gè)必須的包谅将。

log4j主要是針對老的版本,建議也導(dǎo)入

src下面的總配置文件重慢,取名建議這樣applicationContext.xml

導(dǎo)入約束文件:
1饥臂,打開preference,搜索cata———>add---->file system找到解壓包中的schema找里面的beans文件夾某一個(gè)似踱。
2.key type選擇Schema location隅熙,然后把location最后的文件名復(fù)制到key的最后。
3,將其導(dǎo)入到配置文件核芽,在applicationContext中囚戚,寫<beans><beans>,然后調(diào)整到design,右鍵beans-->Edit namespace-->add-->xsi-->確認(rèn)轧简,
再點(diǎn)add驰坊,選擇Specify new Nnamespace,Browse吉懊,選擇select xml catalog entry庐橙,找到剛才導(dǎo)入的schema,再把去掉文件的部分粘貼到上面一行

或者采用直接復(fù)制的方式:
1.必須的約束
spring-framework-3.2.0.RELEASE-dist/spring-framework-3.2.0.RELEASE/docs/spring-framework-reference/htmlsingle/index.html#spring-core 目錄5. The IoC container 5.2.1的位置

set方法注入:
Spring容器在初始化的時(shí)候就已經(jīng)創(chuàng)建對象了
<property name="name" value="張三"></property> 設(shè)置靜態(tài)值的時(shí)候用value
<property name="name" ref="car"></property> 設(shè)置引用類型用ref
[圖片上傳中借嗽。态鳖。。(2)]

配置文件依賴注入格式:(記得set和get方法)
[圖片上傳中恶导。浆竭。。(3)]

方式二:
采用自動注入
[圖片上傳中惨寿。邦泄。。(4)]

對象的注入方式:
[圖片上傳中裂垦。顺囊。。(5)]

實(shí)例化的方式:
1.配置文件注入蕉拢,控制反轉(zhuǎn)ioc
2.靜態(tài)工廠
3.實(shí)例工廠
2
[圖片上傳中特碳。诚亚。。(6)]

[圖片上傳中午乓。站宗。。(7)]
3
[圖片上傳中益愈。梢灭。。(8)]

[圖片上傳中蒸其。敏释。。(9)]

作用域:用于確定spring創(chuàng)建bean實(shí)例個(gè)數(shù)
singleton 單例枣接,默認(rèn)值颂暇。
prototype 多例,每執(zhí)行一次getBean將獲得一個(gè)實(shí)例但惶。
可以通過scope屬性對其進(jìn)行單例或者多例的設(shè)置

junit的創(chuàng)建規(guī)則:

[圖片上傳中耳鸯。。膀曾。(10)]
建立一個(gè)和src同級的資源文件夾县爬,包名和你要測試類的包名一致,類名(建立junit類)名和要測試的類名一致后面加Test

采用注解的方式來進(jìn)行:
1加入約束
2開啟包掃描
注解的方式:
加上約束添谊,開啟包掃描:
[圖片上傳中财喳。。斩狱。(11)]

注解實(shí)現(xiàn)bean的裝配
添加約束文件耳高,再開啟包掃描
spring3/spring-framework-3.2.0.RELEASE-dist/spring-framework-3.2.0.RELEASE/docs/spring-framework-reference/html/xsd-config.html 2.8位置
開啟包掃面 <context:component-scan base-package="com.qy"/>

@Autowired,Resource 自動裝配依賴所踊,默認(rèn)是按照類型來裝配
@Resource(name="userDao")泌枪,自動按照名字來裝配
@Scope("prototype")
@Repository:dao層
@Service:service層
@Controller:web層

代理模式:
[圖片上傳中。秕岛。碌燕。(12)]
條件:目標(biāo)對象和代理對象要實(shí)現(xiàn)同一個(gè)接口,在目標(biāo)對象和增強(qiáng)類的方法完成后继薛,在代理對象的構(gòu)造方法中傳入增強(qiáng)和目標(biāo)對象這兩個(gè)參數(shù)修壕,在代理對象的重寫方法中目標(biāo)對象和增強(qiáng)各自調(diào)用自己的方法,然后直接new代理類調(diào)用重寫接口的方法遏考。

[圖片上傳中慈鸠。。灌具。(13)]

[圖片上傳中青团。像棘。。(14)]

(已過時(shí))
[圖片上傳中壶冒。。截歉。(15)]

Spring的aop:

連接點(diǎn)(Joinpoint):目標(biāo)對象中所有可以增強(qiáng)的方法
切點(diǎn)(Pointcut):目標(biāo)對象已經(jīng)增強(qiáng)的方法
增強(qiáng)/通知(Advice):增強(qiáng)的代碼
目標(biāo)對象(Target):被代理的對象
織入(Weaving):將增強(qiáng)應(yīng)用到連接點(diǎn)的過程
代理(Proxy):將通知織入到目標(biāo)對象之后胖腾,形成的代理對象
切面(aspect):切點(diǎn)+增強(qiáng)

2.采用jdk動態(tài)代理實(shí)現(xiàn):(缺點(diǎn):必須要有接口)
必須先創(chuàng)建一個(gè)接口,再創(chuàng)建一個(gè)實(shí)現(xiàn)類
[圖片上傳中瘪松。咸作。。(16)]
創(chuàng)建一個(gè)類實(shí)現(xiàn)InvocationHandler宵睦,然后寫構(gòu)造方法记罚,重寫invoke方法(注意全是反射下面的包)
[圖片上傳中。壳嚎。桐智。(17)]
用Proxy調(diào)用相應(yīng)的方法,獲得返回對象
[圖片上傳中烟馅。说庭。。(18)]
如果需要多層增強(qiáng)郑趁,那么下一次把代理類直接看成目標(biāo)對象

3.采用CGlib來實(shí)現(xiàn)動態(tài)代理
CGlib采用非常底層的字節(jié)碼技術(shù)刊驴,可以為一個(gè)類創(chuàng)建子類,并在子類中采用方法攔截技術(shù)攔截所有父類方法的調(diào)用寡润,并織入橫切邏輯
需要先導(dǎo)入包:\spring-framework-3.0.2.RELEASE-dependencies\net.sourceforge.cglib\com.springsource.net.sf.cglib\2.1.3
[圖片上傳中捆憎。。梭纹。(19)]

[圖片上傳中掷酗。读虏。。(20)]

創(chuàng)建增強(qiáng):
Spring使用增強(qiáng)類定義橫切邏輯,同時(shí)由于Spring只支持方法連接點(diǎn)欢摄,增強(qiáng)還包括了在方法的哪一點(diǎn)加入橫切代碼的方位信息,所以增強(qiáng)既包含橫切邏輯醒颖,還包含部分連接點(diǎn)的信息
AOP聯(lián)盟為增強(qiáng)定義了org.aopalliance.aop.Advice接口剿另,Spring支持5種類型的增強(qiáng)

前置增強(qiáng):org.springframework.aop.BeforeAdvice代表前置增強(qiáng),因?yàn)镾pring只支持方法級的增強(qiáng)逛钻,所以MethodBeforeAdvice是目前可用的前置增強(qiáng)僚焦,表示在目標(biāo)方法執(zhí)行前實(shí)施增強(qiáng),而BeforeAdvice是為了將來版本擴(kuò)展需要而定

后置增強(qiáng):org.springframework.aop.AfterReturningAdvice代表后增強(qiáng)曙痘,表示在目標(biāo)方法執(zhí)行后實(shí)施增強(qiáng)芳悲;

環(huán)繞增強(qiáng):org.aopalliance.intercept.MethodInterceptor代表環(huán)繞增強(qiáng)立肘,表示在目標(biāo)方法執(zhí)行前后實(shí)施增強(qiáng);

異常拋出增強(qiáng):org.springframework.aop.ThrowsAdvice代表拋出異常增強(qiáng)名扛,表示在目標(biāo)方法拋出異常后實(shí)施增強(qiáng)谅年;

先導(dǎo)入aop聯(lián)盟的包:spring-framework-3.0.2.RELEASE-dependencies\org.aopalliance
導(dǎo)入aop的包:spring-framework-3.2.0.RELEASE-dist\spring-framework-3.2.0.RELEASE\libs
創(chuàng)建的每個(gè)增強(qiáng)類實(shí)現(xiàn)上面的接口就行了,拋出異常增強(qiáng)得注意一下肮韧,那是一個(gè)空接口融蹂,方法的寫法是固定的
[圖片上傳中。弄企。超燃。(21)]
使用方式:
[圖片上傳中。拘领。意乓。(22)]
創(chuàng)建切面(注解實(shí)現(xiàn)):
AspectJ是一個(gè)面向切面的框架,它擴(kuò)展了Java語言约素。AspectJ定義了AOP語法届良,所以它有一個(gè)專門的編譯器用來生成遵守Java字節(jié)編碼規(guī)范的Class文件。
導(dǎo)入兩個(gè)包spring-framework-3.0.2.RELEASE-dependencies\org.aspectj
waver.jar和tools.jar
[圖片上傳中业汰。伙窃。。(23)]
注意在環(huán)繞增強(qiáng)的時(shí)候需要傳入?yún)?shù)样漆,而且注意寫法为障,還有就是匹配的方式有很多種,學(xué)會利用*和.
[圖片上傳中放祟。鳍怨。。(24)]

采用配置文件的方式來進(jìn)行創(chuàng)建:
需要先添加約束文件:2.7
[圖片上傳中跪妥。鞋喇。。(25)]

[圖片上傳中眉撵。侦香。。(26)]

Spring對dao層的封裝
spring-jdbc 主要封裝了spring以JDBC方式對數(shù)據(jù)庫訪問的各種操作類
spring-tx 主要就是封裝了spring對于事物的控制

spring-framework-3.2.0.RELEASE-dist\spring-framework-3.2.0.RELEASE\libs\spring-tx-3.2.0.RELEASE.jar

dependencies\org.apache.commons\com.springsource.org.apache.commons.dbcp\1.2.2.osgi\com.springsource.org.apache.commons.dbcp-1.2.2.osgi.jar

spring-framework-3.2.0.RELEASE-dist\spring-framework-3.2.0.RELEASE\libs\spring-jdbc-3.2.0.RELEASE.jar

spring-framework-3.0.2.RELEASE-dependencies\org.apache.commons\com.springsource.org.apache.commons.pool

[圖片上傳中纽疟。罐韩。。(27)]

[圖片上傳中污朽。散吵。。(28)]

[圖片上傳中。矾睦。晦款。(29)]

接口回調(diào):

[圖片上傳中。枚冗。缓溅。(30)]

[圖片上傳中。赁温。肛宋。(31)]

[圖片上傳中。束世。。(32)]

dataSource包含了連接數(shù)據(jù)庫的一些參數(shù)床玻,那么jdbcTemplate含有dataSource的引用毁涉,是對dataSource進(jìn)行了封裝
[圖片上傳中。锈死。贫堰。(33)]
在經(jīng)過依賴注入后可直接用jdbcTemplate操作數(shù)據(jù)庫
[圖片上傳中。待牵。其屏。(34)]
dao繼承JdbcDaoSupport

[圖片上傳中。缨该。偎行。(35)]
jdbcDaoSupport對jdbcTemplate和dataSource都進(jìn)行了封裝,往里面注入
一個(gè)即可贰拿,一定要使用dataSource
查詢:List<User> list = this.getJdbcTemplate().query("select * from user", ParameterizedBeanPropertyRowMapper.newInstance(User.class));

通過讀取配置文件的方式來獲得數(shù)據(jù)庫的連接信息
[圖片上傳中蛤袒。。膨更。(36)]

Spring管理事務(wù)
事務(wù)的特性:
1妙真、原子性(Atomicity):事務(wù)中的全部操作在數(shù)據(jù)庫中是不可分割的,要么全部完成荚守,要么均不執(zhí)行珍德。
2、一致性(Consistency):幾個(gè)并行執(zhí)行的事務(wù)矗漾,其執(zhí)行結(jié)果必須與按某一順序串行執(zhí)行的結(jié)果相一致锈候。
3、隔離性(Isolation):事務(wù)的執(zhí)行不受其他事務(wù)的干擾缩功,事務(wù)執(zhí)行的中間結(jié)果對其他事務(wù)必須是透明的晴及。
4、持久性(Durability):對于任意已提交事務(wù),系統(tǒng)必須保證該事務(wù)對數(shù)據(jù)庫的改變不被丟失虑稼,即使數(shù)據(jù)庫出現(xiàn)故障琳钉。

事務(wù)的隔離級別:
Read Uncommitted(讀取未提交內(nèi)容)
在該隔離級別,所有事務(wù)都可以看到其他未提交事務(wù)的執(zhí)行結(jié)果蛛倦。本隔離級別很少用于實(shí)際應(yīng)用歌懒,因?yàn)樗男阅芤膊槐绕渌墑e好多少。讀取未提交的數(shù)據(jù)溯壶,也被稱之為臟讀(Dirty Read)及皂。
Read Committed(讀取提交內(nèi)容)
這是大多數(shù)數(shù)據(jù)庫系統(tǒng)的默認(rèn)隔離級別(但不是MySQL默認(rèn)的)。它滿足了隔離的簡單定義:一個(gè)事務(wù)只能看見已經(jīng)提交事務(wù)所做的改變且改。這種隔離級別 也支持所謂的不可重復(fù)讀(Nonrepeatable Read)验烧,因?yàn)橥皇聞?wù)的其他實(shí)例在該實(shí)例處理其間可能會有新的commit,所以同一select可能返回不同結(jié)果又跛。
Repeatable Read(可重讀)
這是MySQL的默認(rèn)事務(wù)隔離級別碍拆,它確保同一事務(wù)的多個(gè)實(shí)例在并發(fā)讀取數(shù)據(jù)時(shí),會看到同樣的數(shù)據(jù)行慨蓝。不過理論上感混,這會導(dǎo)致另一個(gè)棘手的問題:幻讀 (Phantom Read)。簡單的說礼烈,幻讀指當(dāng)用戶讀取某一范圍的數(shù)據(jù)行時(shí)弧满,另一個(gè)事務(wù)又在該范圍內(nèi)插入了新行,當(dāng)用戶再讀取該范圍的數(shù)據(jù)行時(shí)此熬,會發(fā)現(xiàn)有新的“幻影” 行庭呜。InnoDB和Falcon存儲引擎通過多版本并發(fā)控制(MVCC,Multiversion Concurrency Control)機(jī)制解決了該問題犀忱。
Serializable(可串行化)
這是最高的隔離級別疟赊,它通過強(qiáng)制事務(wù)排序,使之不可能相互沖突峡碉,從而解決幻讀問題近哟。簡言之,它是在每個(gè)讀的數(shù)據(jù)行上加上共享鎖鲫寄。在這個(gè)級別吉执,可能導(dǎo)致大量的超時(shí)現(xiàn)象和鎖競爭。
這四種隔離級別采取不同的鎖類型來實(shí)現(xiàn)地来,若讀取的是同一個(gè)數(shù)據(jù)的話戳玫,就容易發(fā)生問題。例如:
臟讀(Drity Read):某個(gè)事務(wù)已更新一份數(shù)據(jù)未斑,另一個(gè)事務(wù)在此時(shí)讀取了同一份數(shù)據(jù)咕宿,由于某些原因,前一個(gè)RollBack了操作,則后一個(gè)事務(wù)所讀取的數(shù)據(jù)就會是不正確的府阀。
不可重復(fù)讀(Non-repeatable read):在一個(gè)事務(wù)的兩次查詢之中數(shù)據(jù)不一致缆镣,這可能是兩次查詢過程中間插入了一個(gè)事務(wù)更新的原有的數(shù)據(jù)。
幻讀(Phantom Read):在一個(gè)事務(wù)的兩次查詢中數(shù)據(jù)筆數(shù)不一致试浙,例如有一個(gè)事務(wù)查詢了幾列(Row)數(shù)據(jù)董瞻,而另一個(gè)事務(wù)卻在此時(shí)插入了新的幾列數(shù)據(jù),先前的事務(wù)在接下來的查詢中田巴,就會發(fā)現(xiàn)有幾列數(shù)據(jù)是它先前所沒有的钠糊。
在MySQL中,實(shí)現(xiàn)了這四種隔離級別壹哺,分別有可能產(chǎn)生問題如下所示:
[圖片上傳中抄伍。。管宵。(37)]
http://www.cnblogs.com/melody210218/p/7120559.html

Spring的事務(wù)管理:
spring-tx-3.2.0.RELEASE.jar
spring-jdbc-3.2.0.RELEASE.jar
spring-orm-3.2.0.RELEASE.jar
配置:
1逝慧,為service注入事務(wù)管理模板對象
2,為事務(wù)模板對象注入事務(wù)管理器
3啄糙,為事務(wù)管理器注入數(shù)據(jù)源
[圖片上傳中。云稚。隧饼。(38)]

service固定寫法:
[圖片上傳中。静陈。燕雁。(39)]

半自動化的方式
org.springframework.transaction.interceptor.TransactionProxyFactoryBean
必須要有接口,加載的是代理類
需要導(dǎo)入相關(guān)的包鲸拥,aop和aop聯(lián)盟的包
[圖片上傳中拐格。。刑赶。(40)]

在spring xml 配置aop 自動生成代理捏浊,進(jìn)行事務(wù)的管理
1.配置管理器
2.配置事務(wù)策略
3.配置aop
[圖片上傳中。撞叨。金踪。(41)]

AOP全自動的方式-注解
配置事務(wù)管理器,將并事務(wù)管理器交予spring
在目標(biāo)類或目標(biāo)方法添加注解即可 @Transactional

[圖片上傳中牵敷。胡岔。。(42)]

[圖片上傳中枷餐。靶瘸。。(43)]

[圖片上傳中。怨咪。屋剑。(44)]

Spring整合hibernate
[圖片上傳中。惊暴。饼丘。(45)]
整合Struts2,導(dǎo)入相關(guān)的包辽话,然后配置一個(gè)監(jiān)聽器
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
[圖片上傳中肄鸽。。油啤。(46)]

第二種配置方式:
取消了hibernate的配置文件典徘,交由spring來管理,并且action也由spring來注入益咬,但是在配置action的時(shí)候要注意逮诲,要配置成多例,struts配置文件里面直接寫spring配置文件里面的id進(jìn)行注入幽告。
[圖片上傳中梅鹦。。冗锁。(47)]

[圖片上傳中齐唆。。冻河。(48)]

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末箍邮,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子叨叙,更是在濱河造成了極大的恐慌锭弊,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件擂错,死亡現(xiàn)場離奇詭異味滞,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)钮呀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門桃犬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人行楞,你說我怎么就攤上這事攒暇。” “怎么了子房?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵形用,是天一觀的道長就轧。 經(jīng)常有香客問我,道長田度,這世上最難降的妖魔是什么妒御? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮镇饺,結(jié)果婚禮上乎莉,老公的妹妹穿的比我還像新娘。我一直安慰自己奸笤,他們只是感情好惋啃,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著监右,像睡著了一般边灭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上健盒,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天绒瘦,我揣著相機(jī)與錄音,去河邊找鬼扣癣。 笑死惰帽,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的父虑。 我是一名探鬼主播该酗,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼频轿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起烁焙,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤航邢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后骄蝇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體膳殷,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年九火,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了赚窃。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,605評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡岔激,死狀恐怖勒极,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情虑鼎,我是刑警寧澤辱匿,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布键痛,位于F島的核電站,受9級特大地震影響匾七,放射性物質(zhì)發(fā)生泄漏絮短。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一昨忆、第九天 我趴在偏房一處隱蔽的房頂上張望丁频。 院中可真熱鬧,春花似錦邑贴、人聲如沸席里。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽胁勺。三九已至,卻和暖如春独旷,著一層夾襖步出監(jiān)牢的瞬間署穗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工嵌洼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留案疲,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓麻养,卻偏偏與公主長得像褐啡,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子鳖昌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容