Как автоматически подключить поток, созданный Spring TaskExecutor?

Согласно документации 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));
    }
  }
}

Однако, если MessagePrinterTask имеет автосвязанные зависимости, они не будут настроены Spring, потому что мы создаем экземпляр нашего bean-компонента вне контекста Spring (, по крайней мере, так я это понимаю ), хотя Spring обеспечит фактическое создание потока. Если бы у MessagePrinterTask были автосвязанные зависимости, как бы мы заставили 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());
    }
  }
}

12
задан Jorge 2 August 2012 в 23:34
поделиться