- 没有显式声明构造函数时,使用默认生成的构造函数
- 如果只有一个构造函数,就会使用该构造函数,所以如果该构造函数如果有参数,该参数也必须要注入到容器中,否则编译报错。
- 如果有多个构造函数
- 其中含有无参构造函数,则使用无参构造函数,其他有参构造函数即使参数没有注入到容器中也不会报错
- 其中不包含无参构造,也没有用@Autowired注解其他构造函数,编译报错
- 其中不包含无参构造,但是用了@Autowired注解了一个有参构造,正常,而且其他没有被@Autowired注解的函数,即使参数没有注入到容器中,也不会报错
总结:
如果有无参构造函数,不管是显式还是隐式的,假设不通过@Autowired指定,就用无参构造函数。
如果没有无参构造函数,只有一个能用就直接使用它,有多个构造函数时如果有@Autowired的,就使用它,否则直接报错。
如果要使用那个有参构造,被用到的那个有参构造函数中的参数必须注入到容器。