现在我们有一个类ShopMember
分别有UserService和OrderService继承了ShopMember
此时如果我们想获取ShopMember的所有子类该怎么办呢?
话不多说,上代码。
可以看到,这边我们只是在类里面注入了一个List,泛型则是ShopMember类
然后我们看一下结果
此时可以看到,ShopMember,UserService和OrderService都已经被注入到了shopMember的这个list中去了,这样我们就得到了ShopMember所有的子类。是不是很神奇?
我们平时使用的依赖注入@Autowired基本都是注入的单个对象,为什么还能像这样注入List类型的数据呢.
原因就是当Spring识别到被注入对象是List类型的时候,它会去把所有List泛型的bean对象找出来然后放入被注入的对象中。
在Spring源码中是这样的,这个地方就是说如果是descriptor对应的类型是数组、Map类型,则直接返回所有匹配类型的bean对象
resolveMultipleBeans方法中这个判断,如果被注入的类型是Collection的子类,则找出所有的匹配的类型返回
通过以上的源码可以看出,如果注入的对象是一个List,则会把它对应的泛型的所有对象都找出来放进List中去