回答
Delphi的後續版本中的ClassHelpers允許一些非常有限的AOP類型行爲。您可以使用ClassHelpers將行爲注入其他類,而不會從其中降級。它允許覆蓋現有的方法,然後可以選擇調用現有的方法。
的限制是你必須聲明ClassHelper特定類和它的後代。另外一個類只能有一個ClassHelper。
這些與C#中的擴展方法類似。
AOP取決於兩點:
- 注入額外的代碼到代碼
- 現有單元的一個裝置,放置在其中的代碼應注射條件的能力。
這通常被稱爲代碼編織。它是程序轉換的更大的研究範圍內的專業化。
JIT編譯的語言都有,因爲更多的信息保留在字節碼/ IL實現代碼織不是靜態編譯的程序更多的選擇。它們還支持反射,它提供了在運行時操作代碼的能力。
Delphi.NET和Prism對任何其他.NET語言都具有相同的訪問權限。
我知道有兩個用於Delphi Win32的AOP框架。第一個是MeAOP,這已經被提及。第二個是Infra。這兩個項目都採用了與AOP類似的方法。他們使用RTTI和巧妙的指針操作的組合來攔截方法調用,以便在方法調用之前或之後運行其他代碼。您將橫切功能定義爲框架AOP類的子類。您通過將方法名稱作爲字符串參數傳遞給AOP框架來註冊要攔截的方法。
這兩個框架仍然是積極開發的,實際上比AOP更大。不幸的是文檔是有點稀疏(在紅外線的情況下,主要是在葡萄牙)
另一個項目試圖通過AOP源代碼,在2004年取得了一些成功編織回來。基本上,他們在一個名爲DMS的通用程序轉換工具之上構建了一個方面編織器,並在編譯之前使用它將代碼注入到delphi源文件中。他們面向方面的語言主要受AspectJ的影響。
http://www.gray-area.org/Research/GenAWeave/有鏈接到原始文件和演示以及改造過程中的一些影片。
也可以使用運行時代碼工具來完成此操作。它是一些分析器使用的技術,可以將計數器和堆棧軌跡注入到運行代碼中,而無需修改原始源代碼。可以使用類似的技術將橫切關注注入到靜態編譯的可執行文件中。 PinTool項目就是一個很好的例子。
的DSharp庫功能AOP:
https://bitbucket.org/sglienke/dsharp
更多信息,可以發現:https://bitbucket.org/sglienke/dsharp
也看看TVirtualMethodInterceptor。
自Delphi 2010開始,它在RTL中,允許您在類上的所有虛擬方法上執行OnBefore,OnAfter等調用。
這個呼叫本身應該涵蓋你所需要的使用Rtti,而不是編織,這比編織運行速度快得多。
- 1. Javascript AOP支持
- 2. NServiceBus中的AoP支持?
- 3. Delphi XE5中的AdMob支持
- 4. Delphi中支持'hyper'MIDL類型
- 5. Delphi 2007支持Windows 2008 R2?
- 6. Delphi 7,支持Unicode的XML處理
- 7. 動態值不支持註釋中的屬性 - AspectJ Android [AOP Android]
- 8. Delphi 2010平板電腦支持
- 9. SSL支持smtp.live.com和TIdSmtp(Indy,Delphi)
- 10. Delphi支持哪些操作符重載?
- 11. Delphi 7是否支持inline關鍵字?
- 12. Inscriber Technology Via Builder和Delphi - Alpha Channel支持
- 13. Delphi XE4可以支持iOS 4.x嗎?
- 14. delphi TBitmap是否支持alpha通道
- 15. 不支持aop事務配置的jdbc彈簧
- 16. 支持TRestClient中的UTF-8編碼字符串Delphi XE5
- 17. 在Delphi XE2中推薦支持鼠標滾輪功能?
- 18. 「其他跨雲API支持」在Delphi的路線圖
- 19. 支持NTLMSSP身份驗證的Delphi有HTTP客戶端庫嗎?
- 20. Delphi是否支持所有的MMX/SSE指令?
- 21. Delphi EDataBaseError - 不支持的操作。我該如何解決它?
- 22. 指向Delphi XE支持的泛型類型嗎?
- 23. 是否有支持泛型的Delphi對象序列化庫?
- 24. 支持UTF-8或Unicode的Delphi SMTP組件
- 25. 對Delphi 6的巨大文件支持? (替換系統模塊?)
- 26. 如何使用Delphi的內置多語言支持?
- 27. 針對iOS/Android的Delphi移動版支持套接字
- 28. Delphi 3支持接口的等價物是什麼?
- 29. 哪個積極開發的Delphi組件仍然支持Kylix?
- 30. Delphi的哪些程序分析工具支持持續集成系統?
對於Delphi prism,現在有了開箱即用的AOP支持:http://prismwiki.codegear.com/en/Cirrus – Miel 2010-09-07 15:16:33