指南:多种实现,不同的对象图



如何在指南中执行以下操作?

存在依赖于接口XmlFormatter的类XmlSerializerXmlFormatter有两种实现:CompactXmlFormatterPrettyXmlFormatter

另一个类MyApplication依赖于XmlSerializer的两个实例。一个实例应该配置CompactXmlFormatter,另一个配置PrettyXmlFormatter

public class XmlSerializer {
    public XmlSerializer(XmlFormatter formatter) {
       ...
    }
}
public interface XmlFormatter {
    ...
}
public class CompactXmlFormatter implements XmlFormatter {
    ...
}
public class PrettyXmlFormatter implements XmlFormatter {
    ...
}
public class MyApplication {
    public MyApplication(XmlSerializer compactSerializer, XmlSerializer prettySerializer) {
        ...
    }
}

你如何构造这样一个图?

我知道,一旦你有了2个XmlSerializer实例,将它们注入MyApplication需要在MyApplication构造函数的参数中注释。

我更感兴趣的是如何将XmlFormatter绑定到CompactXmlFormatterPrettyXmlFormatter

使用绑定注释来区分每个XmlFormatter

在你的Module:

bind(XmlFormatter.class).aannotatedWith(Pretty.class)
    .to(PrettyXmlFormatter.class);
bind(XmlFormatter.class).aannotatedWith(Compact.class)
    .to(CompactXmlFormatter.class);

:

@Inject public MyApplication(
    @Compact XmlSerializer compactSerializer, 
    @Pretty XmlSerializer prettySerializer) {
    ...

当然你必须定义@Pretty@Compact注释:

@BindingAnnotation 
@Target({ FIELD, PARAMETER, METHOD }) 
@Retention(RUNTIME) 
public @interface Pretty {}
@BindingAnnotation 
@Target({ FIELD, PARAMETER, METHOD }) 
@Retention(RUNTIME) 
public @interface Compact {}

相关内容

  • 没有找到相关文章

最新更新