のTaskExecutorを使用するSpring's documentationによる方法がある:MessagePrinterTaskは依存関係をautowiredしている場合、我々はSpringのコンテキストの外で私たちのBeanをインスタンス化しているためSpring TaskExecutorで作成されたスレッドをオートワイヤーするにはどうすればよいですか?次のように
import org.springframework.core.task.TaskExecutor;
public class TaskExecutorExample {
private class MessagePrinterTask implements Runnable {
private String message;
public MessagePrinterTask(String message) {
this.message = message;
}
public void run() {
System.out.println(message);
}
}
private TaskExecutor taskExecutor;
public TaskExecutorExample(TaskExecutor taskExecutor) {
this.taskExecutor = taskExecutor;
}
public void printMessages() {
for(int i = 0; i < 25; i++) {
taskExecutor.execute(new MessagePrinterTask("Message" + i));
}
}
}
はしかし、彼らは春で構成されません(少なくとも、それはですSpringが実際のスレッド作成を提供するにもかかわらず) MessagePrinterTaskがautowired依存関係を持つ場合、どのようにSpringに認識させるのですか?私は無駄に以下の変形例を試してみました(はい、オートワイヤリングが正常に有効になっている):
:
import org.springframework.core.task.TaskExecutor;
public class TaskExecutorExample {
@Component
private class MessagePrinterTask implements Runnable {
@Autowired
private autoWiredDependency;
public void run() {
autoWiredDependency.doNotThrowNullPointerExceptionPlease();
}
}
private TaskExecutor taskExecutor;
public TaskExecutorExample(TaskExecutor taskExecutor) {
this.taskExecutor = taskExecutor;
}
public void printMessages() {
for(int i = 0; i < 25; i++) {
taskExecutor.execute(new MessagePrinterTask());
}
}
}
クイックリプライBijuに感謝します。提案a。私が現在行っていることですが、コンストラクタとそれを使用しないクラスのautowire依存関係を維持しなければならないので、ちょっと面倒です。私は提案bを見た。しかし、それがタスクを達成するための最も春の方法であるかどうかはわかりません。しかし、ありがとう! – Jorge
私はオプション@を打ち負かすので@Configurableを使用しています。私のアプリケーションは多くのスレッドをインスタンス化しないので十分です。 – Jorge