国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

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

Aspectwerkz 2.0開發企業AOP快速入門

2019-11-18 11:05:40
字體:
來源:轉載
供稿:網友

  今天,面向方面的程序設計(aspect-oriented PRogramming,AOP) 框架試圖在企業環境中獲得立足之地。這些框架為了得到普遍采用,必須與企業系統中已經在使用的其他框架良好地集成。本文向開發人員展示了,如何將AspectWerkz AOP框架與一些現在常用的框架(如Log4J、Atlassian 性能剖析器、Hibernate和Tapestry)相集成。

  本文從一個現有的Tapestry web應用程序開始。這個應用程序實現兩個單獨的關注點:日志記錄和性能剖析。每個項目都有這些需求,許多項目用Log4J做日志記錄而用Atlassian剖析器框架做性能分析。然后最初的非AOP實現被重構,以便使用AspectWerkz框架來分離每個關注點的實現。產生的應用程序代碼將會更簡單,更輕易維護,而最重要的是,更自然,表達能力更強。

  本文中描述的所有應用程序和源代碼都可以下載得到。

  簡介

  為了證實AOP的強大,我們從一個非AOP Web應用程序開始,并重構它以使用AOP。應用程序的前后映像將說明AOP是多么易于使用,及方面作為java語言的擴展是多么有用。

  示例程序實現了一個示例blog,以答應用戶在已有文章上張貼新的文章和評論。它是由多種框架實現的,包括用于web層的Tapestry,作為O/R Mapping解決方案的Hibernate,以及把各部分結合起來的Sping框架。日志記錄是用Log4J框架實現的,而性能是用Atlassian剖析器來監控的。

  出于演示目的,blog應用程序保持盡可能地簡單。盡管很簡單,blog應用程序包含了使它像一個“真正的”應用程序的足夠功能,因此文中的代碼可以應用于現有的企業項目。

  本文假定讀者對AOP概念有基本的理解。AOP的初學者應該閱讀下面引用的文章和教程。所有的例子都將用運行在BEA WebLogic JRockit 1.4.2 SDK上的AspectWerk 2.0實現。另外一些可選的環境請參見AspectWerk主站點。

  運行示例程序

  要運行示例應用程序,需要一個數據庫和一個servlet容器。本文假定使用MySQL

  安裝完必需的軟件后,下載并解壓示例代碼到一個臨時目錄中。該發行版中有三個文件:

  • blog-ddl.sql
  • blog-preaop.war
  • blog-postaop.war

  首先,設置MySQL來得到所需的數據庫。把數據庫命名為“blog”,并設置一個口令為“passWord”的用戶id“blog”。然后通過執行blog-ddl.sql腳本來定義模式(在MySQL提示符下鍵入sourceblog-ddl.sql)。

  現在我們可以部署應用程序了。Blog應用程序的兩個版本都被打包成WAR文件,所以可以直接了當地部署到servlet容器中。

  現在可以通過訪問網址http://localhost:7001/blog-preaop/blog和http://localhost:7001/blog-postaop/blog來運行應用程序了。試著運行應用程序的一些功能并檢查WEB-INF/classes目錄中的源代碼。本文的其余部分將具體分析兩種實現并著重說明AOP方法的優點。

  分析最初的blog應用程序

  blog應用程序實現了兩個橫切關注點:日志記錄和性能剖析。這些關注點要在貫穿整個應用程序的所有類中實現。讓我們看看,利用AOP出現以前可用的標準Java工具是如何實現這兩個關注點的。

  日志記錄

  日志記錄的目的是能夠在不打開調試器的情況下調試生產應用程序。在我的項目中已經證實很有價值的有,通過記錄每個方法的入口和出口來跟蹤代碼。例如,在HibernateEntryDao類中,下面的代碼是用來查找所有blog入口的:
private static final Log log = Log.getLog(EntryHibernateDao.class); public Entry[] findAll() {    log.enter("findAll");    List entries = getHibernateTemplate().find("from Entry");    log.exit("findAll");    return (Entry[])entries.toArray(new Entry[] {}); } 

  當用于整個代碼時,將對完全的用戶請求產生下面的日志輸出:

com.tss.blog.web.applicationServlet INFO : >service: ’/blog’ com.tss.blog.service.BlogSvcImpl INFO : >findAllEntries com.tss.blog.persistence.EntryHibernateDao INFO : >findAll com.tss.blog.persistence.EntryHibernateDao INFO : <findAll com.tss.blog.service.BlogSvcImpl INFO :   <findAllEntries com.tss.blog.web.ApplicationServlet INFO : <service:’/blog’



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 灌云县| 怀远县| 红原县| 漯河市| 云梦县| 洛南县| 湘潭市| 阿荣旗| 天柱县| 邻水| 兴义市| 潞西市| 新营市| 怀远县| 长岭县| 蓬莱市| 连云港市| 宣汉县| 闸北区| 泗水县| 余姚市| 安宁市| 涿鹿县| 息烽县| 贵定县| 太白县| 南皮县| 曲周县| 青冈县| 屏山县| 汝南县| 岳池县| 顺昌县| 阳泉市| 保亭| 海丰县| 玛曲县| 阿城市| 沂南县| 马尔康县| 南木林县|