0

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

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

所以返回的 JSON 可能类似于

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

目前,我们有一个类来模拟客户端应该是什么,但我们总是用错误方法扩展一个公共基类。

所以,我们有:

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

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

我们有两个实现这些接口的类,并希望 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 接口的对象,而不必扩展我们的常见错误处理类然后实现 NameAndLoc .

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

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

4

1 回答 1

1

只需将NameAndLocResponse接口添加到构造函数中的Class数组作为最后一个参数。结果对象将实现它。您可以在此博客条目中找到一个示例:http: //mydailyjava.blogspot.no/2013/11/cglib-missing-manual.htmlMixin

于 2013-11-14T01:09:55.523 回答