【问题标题】:Play! Framework enhancement process玩!框架增强过程
【发布时间】:2012-12-14 01:01:23
【问题描述】:

我一直在学习戏剧!框架模块并希望对其进行扩展,添加一些功能。我发现了一个从 Enhancer (play.classloading.enhancers.Enhancer) 扩展的类,但不知道为什么玩!采用了这种模式。

为什么要像这样加载类并进行社区代码扩展?我已经阅读了他们非常简单的解释哦,他们为什么这样做,我觉得自己被视为祖母呵呵:http://www.playframework.org/documentation/1.2.5/main#Classenhancement

但这并没有如我所愿。为什么我不能只编写我的用户将使用预期功能扩展的类?如果他们必须重新加载给定一些动态或特殊功能的类,可以,但我的插件代码本质上是静态的。

有谁知道他们为什么这样做以及是否需要我这样做? (在等待答案的同时进行测试!)

【问题讨论】:

    标签: java playframework playframework-1.x


    【解决方案1】:

    字节码增强是一种工具游戏!用于扩展 Java 语言,并在应用程序代码中注入一些“魔法”逻辑。一个例子是控制器的渲染方法增强,它使您能够编写以下代码:

    public static void myAction() {
       String foo = "...";
       int bar = "...";
       render(foo, bar);
    }
    

    而不是

    public static void myAction() {
       String foo = "...";
       int bar = "...";
       renderArgs.put("foo", foo);
       renderArgs.put("bar", bar);
       render();
    }
    

    LocalVariableEnhancer 将增强 myAction 方法并生成从变量名到变量的映射。在render 方法中,它会检查该映射并自动为您将变量放入renderArgs。

    还有其他情况,如get/set 方法生成和JPA 模型的静态工厂方法等。play-morphia 等模块也大量使用字节码增强器。目标是提供您无法在纯 Java 语言框架(例如继承、接口等)中提供的终极应用程序开发人员体验。

    【讨论】:

    • 我已经得到了,但每个插件都应该使用它,还是在某些情况下过度使用?
    • 没有。并非所有插件都需要重写PlayPlugin.enhance 方法,因此也不是所有插件都需要Enhancer 的子类。
    猜你喜欢
    • 2010-12-28
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    • 2012-06-09
    • 2015-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多