在决定之间应该使用什么标准:
假设我有:
interface FooLoader {
Foo loadById(long id);
}
class DBFooLoader implements FooLoader {
... jdbc etc. etc. ...
}
class CachingFooLoader implements FooLoader {
...
@Inject
public CachingFooLoader(FooLoader delegate) {
this.delegate = delegate;
}
...
}
假设我想将FooLoader
绑定到CachingFooLoader
,我[至少]有两种方法来连接它:
变化:
public CachingFooLoader(FooLoader delegate)
为:
public CachingFooLoader(@NonCaching FooLoader delegate)
然后:
bind(FooLoader.class).annotatedWith(NonCaching.class).to(DBFooLoader.class);
变化:
public CachingFooLoader(FooLoader delegate)
为:
public CachingFooLoader(NonCachingFooLoader delegate)
其中NonCachingFooLoader
只是扩展FooLoader
,然后DBFooLoader
实施NonCachingFooLoader
,并相应地连接。
由于多种原因,我习惯使用注释绑定:
但是,创建更具体的界面也有其优势:
那么,应该使用什么标准来确定采取哪种方法?
(据我所知,春季用户,这就是你们所谓的限定词。)
答案 0 :(得分:1)
如果有意义,请使用特定界面 ,即他们必须提供不同的API,因此其他类将以特定方式使用它们。
如果他们以不同的方式提供相同的“服务”,那么只使用一个通用接口,并通过注释区分实现。