我有以下代码:
@Component
public class MainBean {
@Autowired
private MyTask myTask
@Autowired
private TaskScheduler taskScheduler
public void start() {
String str = "Print something to console";
//somehow call constructor and pass str argument??
taskScheduler.execute(myTask);
}
}
@Component
public class MyTask implements Runnable {
private String str;
@Autowired
public MyTask(String str) {
this.str = str;
}
@Override
public void run() {
System.out.println(str);
}
}
我想调用 MyTask 并将 str 参数传递给构造函数。我怎样才能做到这一点?我在任何地方都找不到任何好的例子。
最佳答案
如果我正确理解你想要做什么,一个好的解决方案如下:
@Component
public class MainBean {
@Autowired
private MyTaskFactory myTaskFactory
@Autowired
private TaskScheduler taskScheduler
public void start() {
String str = "Print something to console";
taskScheduler.execute(myTaskFactory.getTask(str));
}
}
public class MyTaskFactory {
public MyTask getTask(String str) {
return new MyTask(str);
}
}
@Configuration
public class MyTaskFactoryConfig {
@Bean
public MyTaskFactory myTaskFactory() {
return new MyTaskFactory();
}
}
请注意,MyTask 将更改为:
public class MyTask implements Runnable {
private String str;
public MyTask(String str) {
this.str = str;
}
@Override
public void run() {
System.out.println(str);
}
}
关于java - Spring DI 与构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23029328/