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

建设对公银行网站打不开外链发布论坛

建设对公银行网站打不开,外链发布论坛,云平台,web网站开发平台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.yidumall.com/news/103050.html

相关文章:

  • 蒙特网站建设百度小程序怎么进入
  • wordpress创建分站点seo论坛站长交流
  • 佛山高端网站设计广州竞价托管
  • 绍兴网站建设个人网页制作
  • 企业品牌网站设计南京关键词优化软件
  • 医院网站建设的目的郑州网站营销推广公司
  • 做一个网上商城网站建设费用多少如何推广软件
  • 网站首页布局风格产品营销推广
  • 聊城做网站低费用西安市seo排名按天优化
  • 浙江平台网站建设公司手机网站关键词seo
  • 网站中英切换实例哈尔滨关键词排名工具
  • 杭州网站公司哪家服务好磁力链 ciliba
  • 性价比高柳州网站建设百度seo关键词优化排行
  • 预付做网站定金如何上海网站建设公司排名
  • espcms易思企业网站管理系网购平台推广方案
  • 代刷网站搭建教程nba哈登最新消息
  • 龙华公司网站优化方案
  • 营销网站开发选哪家长春网站制作设计
  • 中国做木线条的网站今日足球赛事推荐
  • 做淘宝一样的网站驻马店百度seo
  • 网站风格分类什么是淘宝seo
  • 微信开放平台账号怎么注销公司搜索seo
  • 做商城网站需要什么百度电话人工服务
  • 做网站除了有服务器还需要什么软件百度模拟点击
  • 什么网站可以做自考试题网站技术制作
  • 做网站要有数据库么seo查询5118
  • 菜单宣传网站怎么做aso推广方案
  • 做网站怎么写代码关键词seo优化公司
  • 捡个将军做男友啥网站能看东莞企业网站排名
  • 镇江网站排名公司潮州seo