当前位置: 首页 > news >正文

绍兴网站建设模板网站站长工具传媒

绍兴网站建设模板网站,站长工具传媒,常州网站推广公司,白日梦怎么做的网站resolveDependency()实现 该方法表示,传入一个依赖描述(DependencyDescriptor),该方法会根据该依赖描述从BeanFactory中找出对应的唯一的一个Bean对象。 @Nullable Object resolveDependency(DependencyDescriptor descriptor, @Nullable String requestingBeanName,@Null…

resolveDependency()实现

该方法表示,传入一个依赖描述(DependencyDescriptor),该方法会根据该依赖描述从BeanFactory中找出对应的唯一的一个Bean对象。

@Nullable
Object resolveDependency(DependencyDescriptor descriptor, @Nullable String requestingBeanName,@Nullable Set<String> autowiredBeanNames, @Nullable TypeConverter typeConverter) throws BeansException;

下面来分析一下DefaultListableBeanFactoryresolveDependency()方法的具体实现,具体流程图

findAutowireCandidates()实现

根据类型找beanName的底层流程

对应执行流程图为

  1. 找出BeanFactory中类型为type的所有的Bean的名字,注意是名字,而不是Bean对象,因为我们可以根据BeanDefinition就能判断和当前type是不是匹配,不用生成Bean对象
  2. 把resolvableDependencies中key为type的对象找出来并添加到result中
  3. 遍历根据type找出的beanName,判断当前beanName对应的Bean是不是能够被自动注入
  4. 先判断beanName对应的BeanDefinition中的autowireCandidate属性,如果为false,表示不能用来进行自动注入,如果为true则继续进行判断
  5. 判断当前type是不是泛型,如果是泛型是会把容器中所有的beanName找出来的,如果是这种情况,那么在这一步中就要获取到泛型的真正类型,然后进行匹配,如果当前beanName和当前泛型对应的真实类型匹配,那么则继续判断
  6. 如果当前DependencyDescriptor上存在@Qualifier注解,那么则要判断当前beanName上是否定义了Qualifier,并且是否和当前DependencyDescriptor上的Qualifier相等,相等则匹配
  7. 经过上述验证之后,当前beanName才能成为一个可注入的,添加到result中

关于依赖注入中泛型注入的实现

首先在Java反射中,有一个Type接口,表示类型,具体分类为:

  1. raw types:也就是普通Class
  1. parameterized types:对应ParameterizedType接口,泛型类型
  2. array types:对应GenericArrayType,泛型数组
  3. type variables:对应TypeVariable接口,表示类型变量,也就是所定义的泛型,比如T、K
  4. primitive types:基本类型,int、boolean

Spring中,但注入点是一个泛型时,也是会进行处理的,比如:

@Component
public class UserService extends BaseService<OrderService, StockService> {public void test() {System.out.println(o);}}public class BaseService<O, S> {@Autowiredprotected O o;@Autowiredprotected S s;
}
  1. Spring扫描时发现UserService是一个Bean
  2. 那就取出注入点,也就是BaseService中的两个属性o、s
  3. 接下来需要按注入点类型进行注入,但是o和s都是泛型,所以Spring需要确定o和s的具体类型。
  4. 因为当前正在创建的是UserService的Bean,所以可以通过userService.getClass().getGenericSuperclass().getTypeName()获取到具体的泛型信息,比如com.zhouyu.service.BaseService<com.zhouyu.ser
http://www.tj-hxxt.cn/news/47990.html

相关文章:

  • 北京网站制作与营销培训b2b平台
  • 开发公司资质审查用假资料后果深圳网站建设专业乐云seo
  • 中国建设银行官网站下载中心快速网站搭建
  • 元宇宙游戏开发莆田网站建设优化
  • 做快手电商需要什么条件百度seo排名优化是什么
  • 自己做购物网站怎么做清远新闻最新消息
  • 青岛市黄岛区网站建设市场营销策略有哪4种
  • 网站首页样式网站keywords
  • 延安网站建设电话咨询seo搜索引擎优化关键词
  • 网站建设咨询热线爱站网长尾关键词挖掘工具
  • 网站自适应布局 html5全网营销平台有哪些
  • 网站制作变量武汉seo优化
  • 动态网站中搜索用php怎么做代码做电商必备的几个软件
  • 手机网站要域名吗百度热线客服24小时
  • 怎样进入外贸公司网站广告联盟怎么加入
  • 手机网站全屏代码他达拉非片和伟哥区别
  • 开发网站设计公司seo网站优化公司
  • 做旅游网站的福州网站排名
  • 编程网站入门吉安seo
  • 政府网站信息内容建设抚顺seo
  • wordpress手机菜单导航代码企业网站优化技巧
  • 产品定制网站百度指数查询官网大数据
  • 网站建设和管理品牌策划方案怎么写
  • 网站建设五大定位盘多多网盘搜索
  • 网站模板css常见的网络营销手段
  • 网站目录在哪优化搜狗排名
  • 16岁macbookpro日本网站内链优化
  • 章丘做网站公司seo企业培训班
  • 沈阳学习做网站站长工具永久
  • title 门户网站建设招标书独立站推广