玩!框架增强过程

时间:2012-12-14 01:01:23

标签: java playframework playframework-1.x

我一直在学习Play!框架模块并期待扩展它,添加一些功能。我发现了一个扩展自Enhancer(play.classloading.enhancers.Enhancer)的类,无法弄清楚Play的原因!采用这种模式。

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

但它并没有像我想的那样有帮助。为什么我不能只编写我的用户将使用预期功能扩展的类?如果他们必须在给定动态或特殊功能的情况下重新加载类,那么确定,但我的插件代码本质上是静态的。

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

1 个答案:

答案 0 :(得分: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语言框架中提供,例如继承,接口等。