DI实现中构造器注入为什么在单构造器时可省略 @Autowired
三种实现方式(属性注入、构造器注入、setter注入)中的构造器注入,为什么只有一个构造器时,可以省略@Autowired? 这种情况还需要一个大前提:该类也被标注为了归spring创建并管理,将会成为Bean对象存放在容器里。(无论是什么方式标注的@component/@Bean 等都可以) 在该类B归Spring管的这个大前提下,作为类创建的关键——“构造函数”,如果它要求一个A类的参数传入,而A类也是归Spring管,已经注册过了,那么Spring就会自动进行依赖注入DI。 而为什么需要“只有一个构造器”作为前提:因为只有一个有参构造器时,Spring 会自动把它当作注入点,没有注入点歧义。Spring知道你想用这个构造器去创建对象,它就可以为这个构造器里的参数注入对象 为什么另外两种实现方式都得加?Spring会自动管类的创建,但内部需要自己去指定,告诉spring这个地方需要帮我注入对象。字段/Setter 并不是创建对象必须步骤,如可能只是声明个引用型变量作为字段,并不想要对象。