亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

開源技術分析:AOP和Spring事務處理

2019-11-18 13:00:14
字體:
來源:轉載
供稿:網友

  一.為什么要用框架和模式
  
  1.為什么要用模式?
  
  因為模式是一種指導,在一個良好的指導下,有助于你完成任務,有助于你作出一個優良的設計方案,達到事半功倍的效果。而且會得到解決問題的最佳辦法。
  
  2.為什么要用框架?
  
  因為軟件系統發展到今天已經很復雜了,非凡是服務器端軟件,設計到的知識,內容,問題太多。在某些方面使用別人成熟的框架,就相當于讓別人幫你完成一些基礎工作,你只需要集中精力完成系統的業務邏輯設計。而且框架一般是成熟,穩健的,他可以處理系統很多細節問題,比如,事物處理,安全性,數據流控制等問題。還有框架一般都經過很多人使用,所以結構很好,所以擴展性也很好,而且它是不斷升級的,你可以直接享受別人升級代碼帶來的好處。
  
  總之:就是讓開發更簡單,讓我們成功
  
  二. AOP
  
  1. AOP是什么?
  
  AOP是OOP的延續,是aspect Oriented PRogramming的縮寫,意思是面向方面編程。AOP實際是GoF設計模式的延續,設計模式孜孜不倦追求的是調用者和被調用者之間的解耦,AOP可以說也是這種目標的一種實現。
  
  2. 切面意義何在?
  
  就可以在這層切面上進行統一的集中式權限治理。而業務邏輯組件則無需關心權限方面的問題。也就是說,通過切面,我們可以將系統中各個不同層次上的問題隔離開來,實現統一集約式處理。各切面只需集中于自己領域內的邏輯實現。這一方面使得開發邏輯更加清楚,專業化分工更加易于進行;另一方面,由于切面的隔離,降低了耦合性,我們就可以在不同的應用中將各個切面組合使用,從而使得代碼可重用性大大增強。
  
  3. AOP應用范圍
  
  Authentication 權限
  Caching 緩存
  Context passing 內容傳遞
  Error handling 錯誤處理
  Lazy loading 懶加載
  Debugging  調試
  logging, tracing, profiling and monitoring 記錄跟蹤 優化 校準
  Performance optimization 性能優化
  Persistence  持久化
  Resource pooling 資源池
  Synchronization 同步
  Transactions 事務
  
  三.Spring事務處理
  
  1.Spring事務治理能給我們帶來什么?
  
  對于傳統的基于特定事務資源的事務處理而言(如基于JDBC 的數據庫訪問),Spring并不會對其產生什么影響,我們照樣可以成功編寫并運行這樣的代碼。同時,Spring還提供了一些輔助類可供我們選擇使用,這些輔助類簡化了傳統的數據庫操作流程,在一定程度上節省了工作量,提高了編碼效率。
  
  對于依靠容器的參數化事務治理而言,Spring則表現出了極大的價值。Spring本身也是一個容器,只是相對EJB容器而言,Spring顯得更為輕便小巧。我們無需付出其他方面的代價,即可通過Spring實現基于容器的事務治理(本質上來講,Spring的事務治理是基于動態AOP)。
  
  2. Hibernate in Spring
  applicationContext.xml
  
  <!-- Hibernate SessionFactory --><bean id="sessionFactory“
  class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
  <property name="dataSource"><ref local="dataSource" /></property>
  <property name="mappingResources">
  <list><!-- Add list of .hbm.xml files here -->
  <value>org/mzone/model/Tuser.hbm.xml</value>
  <value>org/mzone/model/Article.hbm.xml</value>
  </list>
  </property>
  <property name="hibernateProperties">
  <props>
  <prop  key="hibernate.dialect">net.sf.hibernate.dialect.SybaseDialec</prop>
  <prop key="hibernate.show_sql">True</prop>
  </props>
  </property>
  </bean><!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) -->
  <bean id="transactionManager"
  class="org.springframework.orm.hibernate.HibernateTransactionManager">
  <property name="sessionFactory"><ref local="sessionFactory" /></property>
  </bean>
  <bean id="baseTXProxy" lazy-init="true"
  
  class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
  <property name="transactionManager"><ref bean="transactionManager"/></property>
  <property name="target">
  <ref local=" userManagerTarget " />
  </property>
  <property name="transactionAttributes">
  <props>
  <prop key="save*">PROPAGATION_REQUIRED</prop>
  <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
  <prop key="remove*">PROPAGATION_REQUIRED</prop>
  <prop key="*">PROPAGATION_REQUIRED</prop>
  </props>
  </property>
  </bean>
  <bean id="userManagerTarget" class="org.mzone.service.impl.UserManagerImpl">
  <property name="userDAO"><ref local="userDAO"/></property>
  <property name="articleDao"><ref local="articleDAO"/></property>
  </bean>
  
  UserDAO.java ArticleDAO.java
  public class UserDAOImpl extends HibernateDaoSupport implements UserDAO {
  public void saveUser(Tuser user) {
  getHibernateTemplate().saveOrUpdate(user);
  }}public class ArticleDAOImpl extends HibernateDaoSupport implements ArticleDAO {
  public void saveArticle(Article article) {
  getHibernateTemplate().saveOrUpdate(article);
  }}
  
  HibernateDaoSupport
  
  實現了HibernateTemplate和SessionFactory實例的關聯。HibernateTemplate對Hibernate Session操作進行了封裝,而HibernateTemplate.execute方法則是一封裝機制的核心,感愛好可以研究一下其實現機制。
  
  借助HibernateTemplate我們可以脫離每次數據操作必須首先獲得Session實例、啟動事務、提交/回滾事務以及煩雜的try/catch/finally的繁瑣操作。從而獲得以上代碼中精干集中的邏輯呈現效果。
  
  org.mzone.service.impl.UserManagerImpl
  public class UserManagerImpl implements UserManager {
  private UserDAO userDao;
  private ArticleDAO articleDao;
  public void saveUserAndArticle(Tuser user, Article article) {
  userDao.saveUser(user);
  articleDao.saveArticle(article);
  }}
  
  測試代碼
  InputStream is = new FileInputStream("applicationContext.xml");
  XmlBeanFactory factory = new XmlBeanFactory(is);UserManager userManager =
  (UserManager )factory.getBean(" baseTxProxy ");
  user = new Tuser();
  article = new Article();
  user.setUsername("hellboys_topic 1");
  user.setPassWord("12345678_topic 1");
  article.setTitle("hellboys_topic 1");
  article.setContent("hellboys_topic 1");
  userManager.saveUserAndArticle(user,article);
  
  注重問題
  UserManager userManager =
  (UserManager )factory.getBean(" baseTxProxy ");UserManager userManager =
  (UserManagerImpl) ctx.getBean("baseTxProxy");java.lang.ClassCastException
  
  原因在于Spring的AOP實現機制,前面曾經提及,Spring中的事務治理實際上是基于動態AOP機制實現,為了實現動態AOP,Spring在默認情況下會使用Java DynamicProxy,但是,Dynamic Proxy要求其代理的對象必須實現一個接口,該接口定義了預備進行代理的方法。而對于沒有實現任何接口的Java Class,需要采用其他方式,Spring通過CGLib10實現這一功能。
  CGLib可以在運行期對Class行為進行修改。由于其功能強大,性能出眾,經常被作為Java Dynamic Proxy
  之外的動態Proxy模式的實現基礎。在Spring、Hibernate中都用到了CGLib類庫。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕久精品免费视频| 欧美日韩免费看| 7m精品福利视频导航| 欧美激情精品久久久久久大尺度| 国产精品久久久久久久久| 国产精品丝袜久久久久久不卡| 日韩免费av一区二区| 亚洲欧美在线免费观看| 精品国内亚洲在观看18黄| 成人激情视频在线| 日韩激情av在线免费观看| 97国产精品久久| 国产精品美女呻吟| 欧美激情欧美激情在线五月| 久久精品国产69国产精品亚洲| 欧美极品少妇xxxxⅹ喷水| 青青草一区二区| 欧美激情国内偷拍| 国产精品网站视频| 国产精品v日韩精品| 欧美日韩在线第一页| 欧美日韩在线视频观看| 国产精品久久久久久五月尺| 国产成人综合亚洲| 国产精品免费视频久久久| 日韩国产高清视频在线| 欧美日本黄视频| 精品国产视频在线| 性视频1819p久久| 精品国产区一区二区三区在线观看| 91香蕉国产在线观看| 成人疯狂猛交xxx| 亚洲国产天堂久久综合网| 日韩大片在线观看视频| 欧美性一区二区三区| 久久久久久噜噜噜久久久精品| 中国china体内裑精亚洲片| 91精品国产91久久久久久久久| 国产精品jvid在线观看蜜臀| 欧美成人激情图片网| 97国产成人精品视频| 欧美亚洲另类视频| 亚洲综合精品一区二区| 成人在线中文字幕| 伊人男人综合视频网| 国模私拍视频一区| 色综合亚洲精品激情狠狠| 国内精品400部情侣激情| 日韩视频精品在线| 欧美激情精品久久久久久久变态| 亚洲视频在线免费观看| 国产成人精品综合久久久| 国产999在线| 日韩精品免费在线观看| 亚洲第一免费播放区| 国产欧美日韩综合精品| 9.1国产丝袜在线观看| 久久夜色撩人精品| 欧美亚洲国产精品| 国产精品高清免费在线观看| 色综合色综合久久综合频道88| 影音先锋欧美在线资源| 日韩欧美主播在线| 日本免费在线精品| 96sao精品视频在线观看| 91久久久亚洲精品| 久久精品电影一区二区| 成人欧美一区二区三区在线湿哒哒| 亚洲缚视频在线观看| 色中色综合影院手机版在线观看| 久久伊人精品视频| 国产成人精品999| 久久视频在线播放| 亚洲综合在线中文字幕| 国产亚洲成av人片在线观看桃| 88国产精品欧美一区二区三区| 久久久久日韩精品久久久男男| 欧美性极品xxxx做受| 成人a级免费视频| 国产精品video| 久久久久99精品久久久久| 精品久久久国产| 日韩中文字幕国产精品| 日韩美女在线观看| 日韩av在线影院| 日韩精品www| 亚洲欧洲日产国码av系列天堂| 久久亚洲一区二区三区四区五区高| 日韩精品在线观| 欧美人在线观看| 91在线视频精品| 亚洲精品不卡在线| 日韩va亚洲va欧洲va国产| 成人激情春色网| 欧美在线视频网站| 国产一级揄自揄精品视频| 欧美日韩午夜激情| 久久久久久久久久亚洲| 欧美日韩成人免费| 成人午夜一级二级三级| 亚洲欧美日韩国产精品| 国产精品久久久久久久av电影| 日韩精品在线观看一区| 日日狠狠久久偷偷四色综合免费| 亚洲精品资源在线| 欧美激情中文字幕乱码免费| 欧美一区三区三区高中清蜜桃| 午夜剧场成人观在线视频免费观看| 亚洲人线精品午夜| 色伦专区97中文字幕| 日韩av在线一区二区| 日本高清+成人网在线观看| 国产一区二区三区三区在线观看| 日韩禁在线播放| 久久精品国产亚洲一区二区| 欧美激情第6页| 成人h片在线播放免费网站| 亚洲精品一区久久久久久| 日韩一区二区在线视频| 亚洲国产91色在线| 欧美激情欧美激情在线五月| 亚洲人永久免费| 91精品久久久久久综合乱菊| 上原亚衣av一区二区三区| 亚洲无亚洲人成网站77777| 欧美日韩午夜剧场| 日韩电视剧免费观看网站| 欧美巨猛xxxx猛交黑人97人| 久久综合色影院| 国产69久久精品成人看| 亚洲一区二区三区在线免费观看| 亚洲伊人一本大道中文字幕| 中文字幕综合一区| 日韩成人小视频| 亚洲国产一区二区三区在线观看| 国产精品欧美一区二区三区奶水| 国产精品电影久久久久电影网| 久久精品福利视频| 久久久精品网站| 亚洲永久在线观看| 国产91网红主播在线观看| 日韩成人小视频| 国产精品18久久久久久麻辣| 欧美福利小视频| 欧美另类第一页| 91在线免费视频| 欧美做爰性生交视频| 中文字幕视频一区二区在线有码| 欧美乱妇高清无乱码| 久久综合伊人77777尤物| 中文字幕一区日韩电影| 日韩久久免费电影| 亚洲美女福利视频网站| 欧美大尺度在线观看| 精品国偷自产在线视频99| 91在线观看免费| 国产精品欧美一区二区三区奶水| 久久久久久久久91| 奇米四色中文综合久久| 欧美激情第一页xxx| 中文字幕精品一区二区精品| 欧美日韩精品在线| 一区二区三区国产在线观看| 日韩亚洲欧美成人|