首先,我认为这不一定是个好主意,我只是看看这是否真的有可能。我可以看到一些好处,例如不必显式转换为我们发送给客户端的对象,并使用接口将某些安全问题的字段列入黑名单。我绝对不会坚持这个想法,但我想尝试一下。
我们正在使用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
答案 0 :(得分:1)
只需将NameAndLocResponse
接口添加到Class
构造函数中的Mixin
数组,作为 last 参数。生成的对象将实现它。您可以在此博客条目中找到此示例:http://mydailyjava.blogspot.no/2013/11/cglib-missing-manual.html