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


spring项目启动时,打了一个断点:@Bean修饰如图的jobManager时,该方法的参数List<Job> jobConfigurations,是怎么获取到Job的实现类的?是因为Job接口上添加了@Component注解?

接口上添加@Component就可以找到Job的所有实现类?
然后在@Bean实例化参数JobManager时,就会把Job的所有实现类作为参数传递给JobManagerImpl的构造方法?
是我这样理解的吗?
疑惑点:
① 为什么@Component可以写在接口上,是因为注入的是接口的实现类吗?我困惑的是:接口是不能实例化的
② 为什么在@Bean修饰的方法的参数上,接口的实现类都作为了参数传递?@Bean注解的实例化是在@Component注解之后实例化?


回答:

是怎么获取到Job的实现类的?是因为Job接口上添加了@Component注解?

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

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

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

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

没用

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

按照依赖顺序初始化


回答:

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

以上是 @Bean的注入方法时,方法参数为接口时,会扫描接口的所有实现类然后实例化注入吗? 的全部内容, 来源链接: utcz.com/p/944910.html

回到顶部