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

成华区住房和城乡建设厅网站企业网站建设

成华区住房和城乡建设厅网站,企业网站建设,课程网站建设的目标,cms二次开发网站建设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.mmbaike.com/news/52801.html

相关文章:

  • 怎么免费制作企业网站网站设计与制作教程
  • wordpress 开启sslseo优化网站快速排名
  • 电子商务网站建设实用教程凡科建站靠谱吗
  • 环评怎么在网站做公示百度外推排名代做
  • 三一重工的网站是哪家做的盐城seo营销
  • 百度如何做网站seo推广优化方案
  • 网站做压力测试 环境sem投放
  • 做商城网站用什么框架seo搜索引擎优化工资薪酬
  • 石家庄企业建站企业网站的搜索引擎推广与优化
  • 日文网站设计网络营销模式
  • 线上分销平台有哪些网站优化排名技巧
  • 重庆网站网络推广推广广告公司网站
  • 一个门户网站怎么做济南谷歌推广
  • 织梦免费自适应网站模板汕头网站排名
  • 六安企业网站seo多少钱郑州seo优化顾问阿亮
  • 网站建设河南如何百度推广
  • 做一个色流网站怎么做网络营销产品推广方案
  • 网站建网站建设企业电话seo上海公司
  • 企业网站管理系统联系我们怎么添加seo引擎搜索网站关键词
  • 锦州做网站多少钱网站seo去哪个网站找好
  • 网站建设pc指什么江小白网络营销案例
  • 网站制作用什么编程百度推广怎么联系
  • 网站开发外包维护合同摘抄一小段新闻
  • 福建微网站建设公司网站建设有多少公司
  • 购物网站底部设计创网站永久免费建站
  • 微信公众号搭建微网站百度竞价是seo还是sem
  • 深圳Wordpress网站宁波seo教学
  • php网站设置如何使用不受限制的万能浏览器
  • 公司要建设网站需要那些程序网址导航该如何推广
  • php网站开发师招聘互联网项目