據Spring's documentation使用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因爲我們實例化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());
}
}
}
感謝您的快速回復Biju。建議a。是我目前正在做的,但有點煩人,因爲我不得不在類中維護一個構造函數和自動裝配依賴關係。我見過建議b。但我不確定這是否是完成任務的最春天的方式。雖然謝謝! – Jorge 2012-08-03 17:25:27
我現在使用@Configurable,因爲它擊敗了選項a。我的應用程序沒有實例化很多線程,所以它就足夠了。 – Jorge 2012-08-06 20:04:21