[转]基于Dynamic Proxy 技术的方法拦截器开发 来自代理技术--代码变得更简洁 在面向对象编程中,会用到大量的类,并且会多次调用类中的方法
有时可能需要对这些方法的调用进行一些控制
如在权限管理中,一些用户没有执行某些方法的权限
又如在日志系统中,在某个方法执行完后,将其执行的结果记录在日志中
处理这些需求的一般做法是在调用这些方法的地方加上适当的代码
如以下 C#代码如示: public class Class1 { public void MyMethod() {
} static void Main() { Class1 c1 = new Class1(); if(permit()) { c1
MyMethod(); logger(); } } } 在以上代码中,permit()是一个得到MyMethod 方法执行权限的函数,如果 MyMethod 方法可以被执行,那么 permit()返回 true,否则,返回 false
logger()是记录日志的函数
我们可以看出,在这段程序中存在一个问题,就是它的主要功能是执行 MyMethod 方法,至于权限控制以及日志功能只是它的次要功能(这里说它们是次要功能,并不是说它们不重要,而是说没有这些功能并不影响程序的核心功能的执行)
而将这些次要功能和程序的主要业务逻辑混在一起,如果程序所涉及的类比较多的话,这些次要功能的代码将和业务逻辑代码紧密地结合在一起,这样在修改某一部分时(比如换一个写日志的函数),必须要修改大量的代码
而且程序员在考虑业务逻辑的同时,还要关注这些次要功能,从而无法将精力集中在业务逻辑上
根据以上在软件开发中存在的不足,人们提出了代理(Proxy)技术用以解决上述的问题
代理技术的基本原理是在待调用类和调用者之间加了一个代理类(Proxy Class),这个代理类有两个作用