gpt4 book ai didi

java - 使用 CGLIB 创建实现新接口(interface)的 mixin

转载 作者:行者123 更新时间:2023-12-01 14:43:41 25 4
gpt4 key购买 nike

首先,我认为这不一定是个好主意,我只是看看这是否真的可行。我可以看到一些好处,例如不必显式转换为我们发送给客户端的对象,以及使用接口(interface)将某些涉及安全问题的字段列入黑名单。我绝对不会坚持这个想法,但我想尝试一下。

我们使用 Spring MVC + Jackson 直接从对象生成 JSON。我们的域对象包含发送到客户端所需的数据,并且我们有一个错误字符串列表,根据需要将其添加到每个传出的 JSON 请求中。

所以返回的 JSON 可能类似于

{ name: 'woohoo', location : 'wahoo', errors : ['foo'] }

目前,我们有一个类来模拟客户端的内容,但我们总是使用错误方法扩展一个公共(public)基类。

所以,我们有:

interface NameAndLoc { 
String getName();
String getLocation();
}

interface ResponseErrors { 
List<String> getErrors();
void appendError(String);
}

我们有两个类实现这些接口(interface),并希望 CGLIB 生成一个新的类来实现:

interface NameAndLocResponse extends NameAndLoc, ResponseErrors {}

目前,使用 CGLIB mixins,我可以生成具有以下内容的对象:

Object mish = Mixin.create(
new Class [] {NameAndLoc.class, ResponseErrors.class},
new Object [] { new NameAndLocImpl(), new ResponseErrorsImpl() } );
然后,我可以将该对象转换为 NameAndLoc 或 ResponseErrors,但是,我想要做的是创建一个使用相同支持类的对象,但实现 NameAndLocResponse 接口(interface),而不必扩展我们常见的错误处理类和然后实现NameAndLoc。

如果我尝试用我拥有的东西进行转换,就会出错。我确信这是可能的。

我认为它与此非常相似,但又不完全相同:http://www.jroller.com/melix/entry/alternative_to_delegate_pattern_with

最佳答案

只需将 NameAndLocResponse 接口(interface)添加到 Mixin 构造函数中的 Class 数组作为 last 参数即可。生成的对象将实现它。您可以在此博客条目中找到这样的示例:http://mydailyjava.blogspot.no/2013/11/cglib-missing-manual.html

关于java - 使用 CGLIB 创建实现新接口(interface)的 mixin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15684136/

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