Java反射機制與Log4j實現數據歷史記錄
sparta-紫杉 2010-7-22 9: 42
記得09年的時候,當時由于項目需要,需要記錄數據的修改歷史及修改者,主要是為數據的動態改變提供參考。那么在當時的情景下,采用log4j是不能完成這一需求的。因此專門為公司開發了日志模塊,類似于log4j,并起名為log4Drgs。該log4Drgs日志模塊采用Oracle9i記錄數據的歷史的改變和操作者,可最多滿足頁面999條數據字段的修改記錄,并且可以根據字段的多少進行擴展(當然是在999條的范圍內,一個頁面一般不會超過999個字段內容),并打包成通用jar文件供全公司使用。這在當時為數據記錄的確發揮了很重要的作用,但是隨著應用的逐步復雜性,頁面上的字段內容越來越多,特別是在采用循環方式保存數型結構的大量數據時,該log4Drgs模塊逐漸暴露出其效率低下的致命傷;特別是這種橫向擴展字段的設計方式已經不能滿足字段超過999條的需要。
在原來的基礎上進行重新設計,采用縱向擴展字段的設計方式,能夠擺脫在日志記錄中的大量訪問數據庫造成的效率困擾,是一個可行的思路。
但有沒有更加簡潔的方式,比如在日志記錄中直接擺脫數據庫,采用成熟的log4j來進行日志記錄,完成記錄數據動態改變的歷史?
我們不妨先來分析一下吧,在本公司內的框架使用中,對數據的修改大部分是通過getXX()和setXX()方法來實現的,這給我們一種啟發,在數據修改的過程中,若是能夠得到正在運行著對象,并通過該對象的getXX方法就能夠得到對象被修改后的數據,然后進行保存。這個思路讓人興奮,同時具有挑戰性,在系統運行過程中,如何才能得到正在運行著的對象呢?
答案就是Java的反射機制:JAVA反射機制是在運行狀態中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調用它的任意一個方法;這種動態獲取的信息以及動態調用對象的方法的功能稱為java語言的反射機制。
代碼如下:






























調用如下:













Java的反射機制的確能做很多事情,這種強大的功能因此被廣泛應用在Struts2、Spring、Hibernate中,今天我們也來過一把癮,玩一把Java的反射。當然本文的例子比較簡單,僅提供了一個日志記錄的思路和實現,不過這個簡單的實現已經基本能夠完成目前所需要的功能,有興趣的童鞋和小盆友擴展一下吧,擴展好了,給我說一聲啊。
-東營 sparta-紫杉 原創,轉載請注明出處 :)
http://www.aygfsteel.com/SpartaYew/
SpartaYew@163.com
QQ:22086526
posted on 2011-05-19 16:12 sparta-紫杉 閱讀(2817) 評論(1) 編輯 收藏 所屬分類: Java