Spring如何获取一个类的所有子类

本文介绍如何在Spring框架中获取一个类的所有子类。通过一个实例展示了在类ShopMember中使用@Autowired注解注入List<ShopMember>,Spring会自动收集所有ShopMember的子类并注入到列表中,包括UserService和OrderService。这种依赖注入方式揭示了Spring处理集合类型时的内部机制,即查找并注入匹配泛型类型的bean。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现在我们有一个类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中去

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值