gpt4 book ai didi

java - 玩!框架强化流程

转载 作者:行者123 更新时间:2023-12-01 14:59:34 27 4
gpt4 key购买 nike

我一直在研究戏剧!框架模块并希望扩展它,添加一些功能。我发现了一个从Enhancer(play.classloading.enhancers.Enhancer)扩展的类,但不明白为什么Play!采用了这种模式。

为什么要像这样加载类并使其社区代码扩展?我读过他们非常简单的解释哦为什么他们这样做,我感觉就像被当作祖母一样对待:http://www.playframework.org/documentation/1.2.5/main#Classenhancement

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

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

最佳答案

字节码增强是一种工具玩法!用于扩展Java语言,并将一些“神奇”逻辑注入(inject)到应用程序的代码中。一个例子是 Controller 的渲染方法增强,它使您能够编写以下代码:

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 方法并生成从变量名称到变量的映射。在 renderArgs 方法中,它会检查该映射并自动将变量放入 renderArgs 中。

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

关于java - 玩!框架强化流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13871189/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com