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

涵江网站建设/百度页面推广

涵江网站建设,百度页面推广,网站建设合同交印花税吗,seo搜索引擎优化是Spring是如何自动装配Bean的?看源码一些自己的理解,如有错漏,请指正 使用Spring之前我们要先去web.xml中设置一下Spring的配置文件,在Spring的配置文件中,是通过component-scan扫描器去扫描base-package底下所有的类装…

Spring是如何自动装配Bean的?看源码+一些自己的理解,如有错漏,请指正

使用Spring之前我们要先去web.xml中设置一下Spring的配置文件,在Spring的配置文件中,是通过component-scan扫描器去扫描base-package底下所有的类装配到容器中。

<context:component-scan base-package="xxx"/>

要怎么看component-scan的处理类呢?这要看在这个配置文件顶部配置的context命名空间。

xmlns:context="http://www.springframework.org/schema/context"

然后根据这个命名空间去context对应的jar包中找到spring.handlers,在这个文件中就可以找到
在这里插入图片描述
点进去后就可以看到对应的处理类
在这里插入图片描述
再点进来,就可以看到最主要的方法:parse(Element element, ParserContext parserContext)

public BeanDefinition parse(Element element, ParserContext parserContext) {StringbasePackage = element.getAttribute("base-package");basePackage = parserContext.getReaderContext().getEnvironment().resolvePlaceholders(basePackage);String[] basePackages = StringUtils.tokenizeToStringArray(basePackage, ",; \t\n");//配置扫描器ClassPathBeanDefinitionScanner scanner = this.configureScanner(parserContext, element);//扫描basePackages,将BeanDefinition装配到容器中Set<BeanDefinitionHolder> beanDefinitions = scanner.doScan(basePackages);this.registerComponents(parserContext.getReaderContext(), beanDefinitions, element);//将组成部分进行注册(这边没什么用处,只是用于扩展)return null;
}

先来看看doScan方法

protected Set<BeanDefinitionHolder> doScan(String... basePackages) {Assert.notEmpty(basePackages, "At least one base package must be specified");Set<BeanDefinitionHolder> beanDefinitions = new LinkedHashSet();String[] var3 = basePackages;int var4 = basePackages.length;for(int var5 = 0; var5 < var4; ++var5) {String basePackage = var3[var5];Set<BeanDefinition> candidates = this.findCandidateComponents(basePackage);Iterator var8 = candidates.iterator();while(var8.hasNext()) {BeanDefinition candidate = (BeanDefinition)var8.next();ScopeMetadata scopeMetadata = this.scopeMetadataResolver.resolveScopeMetadata(candidate);//candidate.setScope(scopeMetadata.getScopeName());String beanName = this.beanNameGenerator.generateBeanName(candidate, this.registry);if (candidate instanceof AbstractBeanDefinition) {this.postProcessBeanDefinition((AbstractBeanDefinition)candidate, beanName);}if (candidate instanceof AnnotatedBeanDefinition) {AnnotationConfigUtils.processCommonDefinitionAnnotations((AnnotatedBeanDefinition)candidate);}if (this.checkCandidate(beanName, candidate)) {BeanDefinitionHolder definitionHolder = new BeanDefinitionHolder(candidate, beanName);definitionHolder = AnnotationConfigUtils.applyScopedProxyMode(scopeMetadata, definitionHolder, this.registry);beanDefinitions.add(definitionHolder);this.registerBeanDefinition(definitionHolder, this.registry);}}}return beanDefinitions;}

这个方法中最重要的就是this.registerBeanDefinition(definitionHolder, this.registry)这句代码,跟着代码走到最后,发现最终是将对应的beanDefinition放到了ConcurrentHashMap中,实现了Bean的装配。

this.beanDefinitionMap.put(beanName, beanDefinition);

这自动装配的逻辑过得有点快,不管了,先这样。

http://www.jmfq.cn/news/5306347.html

相关文章:

  • 网站建设网银开通/seo教学实体培训班
  • 哈尔滨建设信息网站/百度信息流推广和搜索推广
  • 青海建设局网站/在线网站seo诊断
  • 网站建设基础大纲文案/怎样搭建自己的网站
  • 太原微网站建设/湖南有实力seo优化
  • 建设工程行业招工信息网站/英文站友情链接去哪里查
  • 关于网站建设的广告语/自己怎么免费做网站
  • 枣阳网站建设公司/移动端关键词排名优化
  • 上海市建设安全协会网站查询系统瘫/做企业网站建设公司哪家好
  • 国家建设部网站官网证件查询/百度浏览官网
  • 南宁网站建设速成培训/可口可乐软文范例
  • 网站建设怎么报价/seo是什么意思如何实现
  • 亳州网站建设/福州网站排名推广
  • 通化建设工程信息网站/uc浏览器关键词排名优化
  • 莘庄网站建设/网站策划书的撰写流程
  • 机关事业单位网站建设/哪个软件可以自动排名
  • 科技 网站建设/镇江网站
  • 棋牌网站建设/站长工具端口扫描
  • 网站建设公司 南宁/推广教程
  • 阿里巴巴公司网站建设/河南网络推广那家好
  • 全球网站建设服务商/网络营销特点
  • 吉林省建设厅证件查询网站/1元涨1000粉
  • 江苏省建设人才网站/百度一下你就知道移动官网
  • 网站建设实例大制作/交换链接适合哪些网站
  • 中国建设部建造师网站/广告推广软件
  • 建设网站合同/网站友情链接检测
  • 网站建设相关书籍/网页设计需要学什么软件
  • 山东网站建设费用/优化系统的软件
  • 哈尔滨网站建设工作室/搜索引擎推广实训
  • 天津网站建设服务/seo日常工作内容