3

Guiceの使用に疑問があります。Guice を使用して注入されたコンストラクターであるクラスとMain、それが呼び出されるたびに class の o スレッド オブジェクトを作成するメソッドを呼び出しますAppThreadAppThread内のプライベートクラスMainです。問題は、スレッドの実行中に class のオブジェクトを作成したいことですClassX。このオブジェクトは、Guice を使用して注入されたコンストラクターです。のオブジェクトを注入するのに最適な形式は何かわかりませんClassX。私の最初の解決策は、スレッドの内側に注入し、インジェクターを使用して class のオブジェクトを注入することInjectorです。MainClassX

スレッド内に依存関係を注入するためのよりクリーンなアプローチはありますか?

ありがとう

4

1 に答える 1

5

の独自のサブクラスを作成する代わりにThread(とにかく推奨されません)、「スレッド コード」を を実装する通常のオブジェクトとして記述する必要がありますRunnable。クラスMainはこのクラスを注入する必要があります (またはProvider<MyRunnable>、不明な数のインスタンスを作成する必要がある場合は、実際に を注入できます)。その後、Mainクラスは を作成でき、new Thread(myRunnable)すべてがうまく収まるはずです。

public class MyMainClass {
    @Inject
    MyMainClass(Provider<MyRunnable> runnableProvider) { ... }

    public void spawnThread() {
        new Thread(runnableProvider.get()).start();
    }
}

public class MyRunnable implements Runnable {
    @Inject
    MyRunnable(ClassX myX) { ... }
    public void run() {
        ... do work ...
    }
}
于 2013-02-11T08:37:24.083 に答える