@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