@Bean的注入方法时,方法参数为接口时,会扫描接口的所有实现类然后实例化注入吗?

image.png
spring项目启动时,打了一个断点:@Bean修饰如图的jobManager时,该方法的参数List<Job> jobConfigurations,是怎么获取到Job的实现类的?是因为Job接口上添加了@Component注解?
image.png
接口上添加@Component就可以找到Job的所有实现类?
然后在@Bean实例化参数JobManager时,就会把Job的所有实现类作为参数传递给JobManagerImpl的构造方法?
是我这样理解的吗?
疑惑点:
① 为什么@Component可以写在接口上,是因为注入的是接口的实现类吗?我困惑的是:接口是不能实例化的
② 为什么在@Bean修饰的方法的参数上,接口的实现类都作为了参数传递?@Bean注解的实例化是在@Component注解之后实例化?

阅读 2.7k
2 个回答
是怎么获取到Job的实现类的?是因为Job接口上添加了@Component注解?

不一定是注解方式,但是肯定是声明了 bean

然后在@Bean实例化参数JobManager时,就会把Job的所有实现类作为参数传递给JobManagerImpl的构造方法?

所有 Job 类型的 bean,不是所有实现类

① 为什么@Component可以写在接口上,是因为注入的是接口的实现类吗?我困惑的是:接口是不能实例化的

没用

② 为什么在@Bean修饰的方法的参数上,接口的实现类都作为了参数传递?@Bean注解的实例化是在@Component注解之后实例化?

按照依赖顺序初始化

是的,直接注入list和map都是会直接拿那个类型的所有的spring bean放进来的,map类型的话,key是beanName

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题