オートワイヤードサービスを自己インスタンス化ビューに渡す一般的な方法はありますか?私たちがSpring(@Autowired works)によって管理されるVerticalLayoutと内部にButton(Button)を持つHorizontalLayoutを持っているとしましょう。 HorizontalLayoutの複数のインスタンスを作成する必要があり、ボタンがサービスの何らかのアクションを実行します(@Autowiredは機能しません、Serviceはnullです)。この問題を解決するベストプラクティスは何ですか? HorizontalLayoutのコンストラクタへのパラメータとしてサービスを渡すだけですが、おそらくもっと良い方法があります。自己インスタンス化されたHorizontalLayoutでのオートワイヤリングサービス
@Service
public class SomeService {
public void someMethod(){
// do something
}
}
@SpringView(name = "SomeView")
@ViewScope
public class SomeView extends VerticalLayout {
@Autowired
private SomeService service;
public SomeView(){
addComponent(new Subview());
addComponent(new Subview());
}
}
public class SubView extends HorizontalLayout {
@Autowired
private SomeService service;
public SubView(){
Button btn = new Button("Test");
btn.addClickListener(e->service.someMethod());
addComponent(btn);
}
}
EDIT:コード例を追加しました。 SubViewのオブジェクトはサービスのためにnullを取得します。解決策は、サービスをコンストラクタに渡すことです。しかし、もっと良い解決策があるかどうかを知りたかったのです。
なぜ*それがnullであるか、またはコンストラクタ経由で参照を渡さずにそれを行う方法を尋ねていますか?後者の場合は、コードの簡略化されたバージョンを含めることができます。 – kryger
コードサンプルを追加しました。可能であれば、参照を渡さずにサービスにアクセスする方法を知りたかったのです。 – seniorbenelli