0

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

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

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

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

4

1 回答 1

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 语言框架(例如继承、接口等)中提供的终极应用程序开发人员体验。

于 2012-12-14T01:55:19.377 回答