アプリケーションで GWT を使用しています。写真をキャッシュするには、ClientBundle と ImageResource を使用します。次のような多くの ClientBundles があります。
public interface MenuBundle extends ClientBundle {
@Source(background.png)
ImageResource background();
@Source(image_bg.png)
ImageResource image_bg();
...
}
そして、次のような同じメソッドを持つ数百の ClientBundles:
public interface House1 extends House, ClientBundle {
@Source(house1/pic1.png)
ImageResource pic1();
@Source(house1/pic2.png)
ImageResource pic2();
@Source(house1/pic3.png)
ImageResource pic3();
...
}
public interface House2 extends House, ClientBundle{
@Source(house2/pic1.png)
ImageResource pic1();
@Source(house2/pic2.png)
ImageResource pic2();
@Source(house2/pic3.png)
ImageResource pic3();
...
}
public interface House {
ImageResource pic1();
ImageResource pic2();
ImageResource pic3();
...
}
その結果、「*.cache.png」のようなサーバーに何百もの写真があります。読み込みを高速化するには、必要な写真が少なくて済みます。この目的のために、私は決定を見つけました:
public class ClientBundleModule extends AbstractGinModule {
@Override
protected void configure() {
bind(MenuBundle.class).to(ClientBundlePack1.class);
bind(NatureFuture.class).to(ClientBundlePack1.class);
...
bind(House1.class).to(ClientBundlePack2.class);
bind(House2.class).to(ClientBundlePack2.class);
bind(House3.class).to(ClientBundlePack2.class);
...
}
}
public interface ClientBundlePack1 extends MenuBundle, NatureFuture, ... {
}
public interface ClientBundlePack2 extends House1, House2, House3, ... {
}
Ginjector もありますが、問題は次のとおりです。
ClientBundlePack1 の MenuBundle、NatureFuture、およびその他のクラスは 1 つの全体像にコンパイルされますが (これは良いことです)、House1、House2、House3 およびその他のハウスは 1 つの全体像にコンパイルされません (悪いことです)。
ハウスは、各クラスのハウスを 1 つの図にまとめます。実装を拡張するJavaの方法に問題があり、pic1のような同じメソッドを1つだけ使用する代わりに、すべてのメソッドpic1を使用します。
しかし、私はすべての家を 1 つの写真に参加させる必要があります。GINがそれを行うための設定、注釈があります。または、すべてのハウスに参加する他の方法はありますか? しかし、ハウスのコードを書き直すことはできません。アプリケーションのアーキテクチャが壊れてしまいます。「遅延読み込み」なしで、プリロード直後にすべての家が必要です。
ありがとう。