Spring Boot CommandLineRunner и внедрение конструктора

Я изучаю Spring Boot CommandLineRunner. И у меня есть этот код:

@Component
public class DataLoader implements CommandLineRunner {

    private final OwnerService ownerService;
    private final VetService vetService;

    public DataLoader() {
        ownerService = new OwnerServiceMap();
        vetService = new VetServiceMap();
    }

    @Override
    public void run(String... args) throws Exception {
    ...
    }

Когда вызывается этот конструктор? Я хочу знать, является ли это инъекцией конструктора или нет? Я вижу, что @Autowired нет, но я знаю, что не обязательно ставить @Autowired, когда есть только один конструктор. Любая обратная связь будет оценена!


person Community    schedule 25.08.2018    source источник


Ответы (1)


Да, будет вызван конструктор по умолчанию, но это не внедрение конструктора — вам нечего вводить в этот конструктор с самого начала.

Этот конструктор будет вызываться во время инициации Spring, когда все bean-компоненты собираются и помещаются в контекст приложения.

И поскольку вы делаете new OwnerServiceMap()/new VetServiceMap() (используя оператор new), вы обходите прокси-сервер Spring - таким образом, те, у кого есть какие-то аннотации, такие как @Transactional, допустим, не будут работать.

person Eugene    schedule 25.08.2018
comment
Может быть, одна дополнительная вещь для Когда вызывается этот конструктор? вопрос. Конструктор будет вызываться при запуске весенней загрузки. (По умолчанию каждый компонент является синглтоном) - person pL4Gu33; 25.08.2018