私は Guice の世界から来て、Guice が提供する Modules.override に似た方法を探しています。プロダクション用にベース Module/AbstractBinder を作成し、テストで変更が必要なバインディングをオーバーライドするパターンがあります。
理想的な世界では、単純に Parent AbstractBinder を拡張してから、バインドを実装して親バインダーをオーバーライドしたいと考えています。または、親バインダーをインストールしてから、テスト目的で必要なバインディングをオーバーライドするという別の方法もあります。
public class IOCRestModule extends AbstractBinder {
@Override
protected void configure() {
// Max timeout for rest calls is 20 seconds, this will come from properties later on.
bind(20000).to(Integer.class).named("MAX_REST_REQUEST_TIMEOUT");
bind("tcp://localhost").to(String.class).named("jms.url");
}
}
public class IOCMockRestModule extends AbstractBinder {
public static final Logger logger = Logger.getLogger(IOCMockRestModule.class.getName());
@Override
protected void configure() {
install(new IOCRestModule());
bind(200).to(Integer.class).named("MAX_REST_REQUEST_TIMEOUT");
bind("vm://localhost").to(String.class).named("jms.url");
}
これは可能で、推奨されますか? これを行ったときに、IOCRestModule のバインディングが IOCMockRestModule によってオーバーライドされていないことに気付きました。最後にインストールを追加できると想定していますが、これは機能する可能性がありますが、後で問題が発生するかどうかはわかりません.