解决方法
AOP取决于两件事情:
>将附加代码注入现有代码单元的能力
>将代码注入到哪里的机制.
这通常被称为代码编织.在程序转换的较大研究中是专门化.
JIT编译语言具有比静态编译程序更多的选项,因为更多的信息保留在字节码/ IL中.它们还支持反射,它提供了在运行时操作代码的能力.
Delphi.NET和Prism具有与任何其他.NET语言相同的访问权限.
Delphi Win32有两个AOP框架,我知道.第一个是MeAOP,已经提到了.第二个是Infra.两个项目都采用与AOP类似的方法.他们使用RTTI和巧妙的指针操作的组合来截取方法调用,以便您可以在方法调用之前或之后运行其他代码.您将交叉切割功能定义为框架AOP类的子类.通过将方法名称作为字符串参数传递给AOP框架,注册要拦截的方法.
这两个框架仍然是积极开发的,并且实际上比仅仅AOP更大.不幸的是,文档有些稀疏(在Infra的情况下,主要是葡萄牙语)
另一个项目在2004年通过源代码编写了AOP,取得了一些成功.基本上,他们在名为DMS的通用程序转换工具之上构建了一个方面的编织器,并使用它在编译之前将代码注入到delphi源文件中.他们面向方面的语言主要受AspectJ的影响.
http://www.gray-area.org/Research/GenAWeave/链接到原始论文和演示文稿以及转换过程的一些视频.
也可以使用运行时代码仪器来完成此操作.它是一些技术使用的技术,将计数器和堆栈跟踪注入到运行代码中,而无需修改原始源.可以使用类似的技术将横切关注点注入到静态编译的可执行文件中. PinTool项目是一个很好的例子.