資源描述:
《北大青鳥spring入門課程TP4》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、第四章SpringAOP的應(yīng)用回顧AOP的目的即在正常的業(yè)務(wù)操作之外增加的附加操作通過切入點(diǎn)(pointcut)指名進(jìn)行哪些切面(aspect)操作ProxyFactoryBeaninterceptorNamestargetNameproxyInterfaces攔截器(Interceptor),通知(Advice),和切面的不同(Aspect)2AOP的應(yīng)用事務(wù)切面日志切面其它附加操作切面3事務(wù)切面在介紹事務(wù)切面之前,回顧網(wǎng)上銀行的項(xiàng)目,并使用SpringIOC注入業(yè)務(wù)實(shí)現(xiàn)類所需的sessionFactory實(shí)現(xiàn)步驟和問題思考:實(shí)現(xiàn)業(yè)務(wù)接口和業(yè)務(wù)實(shí)現(xiàn)類(AccountSer
2、vice、LogService)sessionFactory如何注入的,應(yīng)該注入給誰?事務(wù)由誰來管理?4優(yōu)化現(xiàn)在項(xiàng)目經(jīng)理提出需求,希望改進(jìn)代碼的結(jié)構(gòu),達(dá)到如下目標(biāo):transfer方法(或其它業(yè)務(wù)方法)在執(zhí)行時(shí),事務(wù)自動(dòng)開始在正確完成后,事務(wù)提交,并且關(guān)閉hibernatesession在出現(xiàn)RuntimeException(或其子類)異常時(shí),事務(wù)回滾,并關(guān)閉hibernatesession其他異常,仍執(zhí)行提交——關(guān)閉的操作5Spring的解決方案方案A:使用事務(wù)攔截器并代理業(yè)務(wù)實(shí)現(xiàn)類方案B:使用事務(wù)advice和aspect切面來實(shí)現(xiàn)事務(wù)攔截6方案A第一步,改寫Accou
3、ntService業(yè)務(wù)實(shí)現(xiàn)類第二步,定義ProxyFactoryBean以返回AccountService代理對象proxyInterfacestargetNameinterceptorNames–這里添加事務(wù)攔截器7事務(wù)攔截器第三步定義事務(wù)攔截器84、nsfer">PROPAGATION_REQUIREDPROPAGATION_REQUIRES_NEW
事務(wù)屬性以及事務(wù)管理器ShowTime修改log4j.properties,以便觀察Spring執(zhí)行過程log4j.logger.org.springframework.aop=debuglog4j.logger.org.springframewo
5、rk.transaction=debuglog4j.logger.org.springframework.orm.hibernate3=debug9事務(wù)管理器Spring由于需要為多種數(shù)據(jù)層的實(shí)現(xiàn)提供集成支持,針對不同的情況,定義了各種事務(wù)管理器,一定要選擇正確的事務(wù)管理器比如:DataSourceTransactionManager對應(yīng)JDBC事務(wù)HibernateTransactionManager對應(yīng)Hibernate提供的事務(wù)JtaTransactionManager對應(yīng)JTA事務(wù)大多數(shù)事務(wù)管理器都需要設(shè)置dataSource(數(shù)據(jù)源)屬性,對于HibernateT
6、ransactionManager可以只設(shè)置sessionFactory屬性10事務(wù)屬性常見的事務(wù)屬性有:事務(wù)的傳播行為事務(wù)的隔離級別事務(wù)是否只讀——針對只讀事務(wù),Spring在某些情況下會(huì)提供優(yōu)化11事務(wù)的傳播行為以下的定義可以在TransactionDefinition中找到PROPAGATION_REQUIREDPROPAGATION_SUPPORTSPROPAGATION_MANDATORYPROPAGATION_REQUIRES_NEWPROPAGATION_NOT_SUPPORTEDPROPAGATION_NEVER12事務(wù)的傳播行為PROPAGATION_RE
7、QUIRED——表示如果沒有事務(wù),則開始新的事務(wù),事務(wù)已經(jīng)存在,則加入當(dāng)前事務(wù)PROPAGATION_SUPPORTS——表示如果事務(wù)已經(jīng)存在,則加入當(dāng)前事務(wù),如果沒有事務(wù),不會(huì)開始新事務(wù)PROPAGATION_MANDATORY——表示必須有事務(wù)存在,并加入當(dāng)前事務(wù),否則拋出異常PROPAGATION_REQUIRES_NEW——表示每次都開始一個(gè)全新事務(wù)PROPAGATION_NOT_SUPPORTED——表示不會(huì)開始或加入事務(wù)PROPAGATION_NEVER——表示不會(huì)開始或加入事務(wù),如果事務(wù)已存在,拋出異