私はSpringアプリケーションを持っており、Vaadinを使用してWebUIを作成しています。そのために、私はSpringVaadinIntegrationツールを使用しています。
そこで、Vaadinクラスを拡張して、それらをカスタマイズして使用します。たとえば、プロトタイプであるメインのUIクラスがあります。(ユーザーが開いたブラウザウィンドウごとに新しいものをインスタンス化する必要があります。)
@Component
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class MainUI extends UI {
@Autowired
private GameMapView gameMapView;
@Override
protected void init(VaadinRequest request) {
final VerticalLayout layout = new VerticalLayout();
layout.setMargin(true);
setContent(layout);
gameMapView.configureGameMapView();
layout.addComponent(gameMapView);
}
}
これにより、プロトタイプコンポーネントでもあるGameMapViewがインポートされ、VerticalLayoutが拡張されます。次に、GameMapプロトタイプコンポーネントがあり、GridLayoutが拡張されます。
ここで、GameMapクラスを使用する場合、ディメンションと中央のタイルの位置を使用して構成する必要があります。(したがって、サイズと表示するタイルを設定できます。)また、データベースから適切なタイルを取得して表示するには、私のサービスの1つを使用する必要があります。
私がやりたいのは、これらをコンストラクターに渡すことです。次のようになります。
@Component
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class GameMap extends GridLayout {
@Autowired
private LandTileService lts;
public GameMap(int dimension, int xcoor, int ycoor) {
super();
this.setWidth(80, Unit.PERCENTAGE);
this.setHeight(80, Unit.PERCENTAGE);
//START configuration
this.setRows(dimension);
this.setColumns(dimension);
[use the land tile service and coordinates etc.]
//END configuration
}
}
ただし、問題は、SpringBeanのコンストラクター内で自動配線されたSpringBeanを使用できないことと、自動配線されたSpringBeanでオーバーロードされたコンストラクターを使用できないことです。
現在、Springプロトタイプクラスを使用する前に一度呼び出すだけの構成メソッドを作成することでこの問題を回避していますが、それは不十分な解決策のようです。それについて行くより良い方法はありますか?x、y、zパラメータをSpring Componentゲームマップに渡してから、使用を開始する必要があることを強制できるようにしたいと思います。