Spring Boot CommandLineRunner和构造函数注入

时间:2018-08-25 13:11:41

标签: java spring-boot dependency-injection autowired constructor-injection

我正在学习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。任何反馈将不胜感激!

1 个答案:

答案 0 :(得分:2)

是的,将调用默认的构造函数,但这不是 not 构造函数注入-您无需在该构造函数中注入任何内容。

当所有bean都被构建并放置到应用程序上下文中时,该构造函数将在Spring初始化时被调用。

由于您正在使用new OwnerServiceMap()/new VetServiceMap()(使用new进行操作),因此您绕过了Spring的代理-因此,如果它们具有一些像@Transactional这样的注释,那将是行不通的。 / p>