任何“主要”框架都使用猴子修补/开放课程

时间:2009-05-20 12:27:36

标签: language-agnostic

我很好奇使用称为开放类或猴子修补的功能,例如: Ruby,Python,Groovy等。此功能允许您在运行时对现有类或对象进行修改(如添加或替换方法)。

有没有人知道主要框架(例如Rails / Grails / Zope)是否(广泛地)利用这个机会来为开发者提供服务?如果是,请提供示例。

3 个答案:

答案 0 :(得分:8)

Rails对(恕我直言)荒谬的程度这样做。

答案 1 :(得分:2)

.Net允许通过扩展方法。

具体而言,Linq在很大程度上依赖于猴子修补到IEnumerable接口的扩展方法。

答案 2 :(得分:1)

在Java平台上使用它的一个例子(因为你提到了Groovy)是使用AspectJ和JVM工具之类的加载时编织。但是,在这种特殊情况下,您可以选择使用编译时编织。有趣的是,我最近的一个问题是与使用这种加载时编织的问题有关,有些人建议将编译时作为唯一可靠的选择。

使用加载时(运行时)编织为开发人员提供有用服务的AspectJ示例可以是Spring的@Configuration注释,它允许您对未通过Spring的BeanFactory实例化的对象使用依赖注入。

您特别提到了修改方法(或它的工作方式),并且使用的一个示例是在发送到处理程序(某些Controller方法或doPost等)并检查之前截取http请求的方面。查看用户是否有权访问该资源。然后,您的方面可以决定 - 过早地 - 返回带有重定向登录的响应。虽然不修改方法本身的内容,但您仍然在修改方法的工作方式,我会改变它原本会给出的返回值。