我有一个可以采取行动的系统。该系统使用以下方法为每个对象创建一个单独的线程:
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)
。我以前曾经有一个字段注释,但是最近我看到一篇文章说字段注释很糟糕,因此决定重构我的代码。我该怎么办?
答案 0 :(得分:2)
您需要在配置中显式创建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);
}
}
答案 1 :(得分:-2)
使用字段自动装配,例如:
@Autowired
private final A a;
@Autowired
private final B b;
@Autowired
private final C c;
private Site site;