我有一个可以采取行动的系统。该系统使用以下命令为每个对象创建一个单独的线程:

stp.scheduleWithFixedDelay((EditSite) ctx.getBean("EditSite", site), threadTimeParams);


我想使用“ Site”参数创建一个构造函数,但是我应该以某种方式保持自动装配构造函数的工作状态。

public class EditSite{
    private final A a;
    private final B b;
    private final C c;

    private Site site;

    public EditSite(@Autowired A a, @Autowired  B b,@Autowired C c) {
        this.a = a;
        this.b = b;
        this.c = c;
    }

    public void run(){ check(); }
    public void check(){}
}


我的IDE表示我无法创建public EditSite(Site site, @Autowired A a, @Autowired B b,@Autowired C c)。我以前曾经有一个字段注释,但是最近我看到一篇文章说字段注释不好,因此决定重构我的代码。我该怎么做?

最佳答案

您需要在配置中显式创建bean。
您不需要在班级内部进行任何自动装配:

public class EditSite{
  private final A a;
  private final B b;
  private final C c;

  private Site site;

  public EditSite(Site site, A a, B b , C c) {
      this.site=site;
      this.a = a;
      this.b = b;
      this.c = c;
  }

  public void run(){ check(); }
  public void check(){}
}


并为此配置:

@Configuration
public class EditSiteConfig {

  @Bean
  public EditSite editSite(A a, B b, C c){
    Site site = getSite(); //since site is not a bean, you need to get it manually
    return new EditSite(site, a, b, c);
  }

}

10-07 13:21
查看更多