java - Spring DI 与构造函数

标签 java spring constructor

我有以下代码:

@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/

相关文章:

java - 跨越多个 EJB 的用户信息

java - 为什么 StringProperty[值 : ""] is displayed in my table

java - 即使一切看起来都正确,类也没有发现异常

java - 编译器错误和 Money 类分配

c++ - "Ambiguous resolution"选择性构造函数继承错误

java - 将 oracle 数据库的多行写入文本文件

Websphere 9.0 中的 Java 文件

spring - Spring请求是否同步

java - 如何使用 Stream 将 MultiValueMap<String,String> 转换为 Map<String, List<Long>>?

c++ - 如何将断言放在类初始化列表之前?