Как я могу создать конструктор с автоматическими и автоматически подключаемыми полями simultaniosly? - PullRequest
1 голос
/ 26 июня 2019

У меня есть система, которая делает некоторые действия.Эта система создает для каждого объекта отдельный поток, используя:

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).Раньше у меня были аннотации к полям, но недавно я увидел статью, в которой говорилось, что аннотации к полям плохие, и решил реорганизовать мой код.Как я могу это сделать?

Ответы [ 2 ]

2 голосов
/ 26 июня 2019

Вам необходимо явно создать ваш компонент в конфигурации.Вам не нужно никаких автоматических подключений внутри вашего класса:

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);
  }

}
0 голосов
/ 26 июня 2019

Используйте полевую автопроводку, например:

@Autowired
private final A a;

@Autowired
private final B b;

@Autowired
private final C c;

private Site site;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...