我有一个可以采取行动的系统。该系统使用以下命令为每个对象创建一个单独的线程:
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);
}
}