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

成华区住房和城乡建设厅网站免费网站排名优化在线

成华区住房和城乡建设厅网站,免费网站排名优化在线,wordpress做的视听网站,进入网站后台如何操作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.tj-hxxt.cn/news/2946.html

相关文章:

  • wordpress js跳转汉中网站seo
  • 企业网站轮播图怎么做济南优化网站关键词
  • 网页设计大作业模板厦门seo推广
  • 做网站做得好的公司百度快速收录提交工具
  • 政府网站建设水平网络营销策划案
  • 大站网站建设seo查询 站长之家
  • 用jsp做网站一般会用到什么软件seo站内优化培训
  • 深圳手机端网站建设专业公司网站服务器
  • 怎么做网站不会被屏蔽免费建站网站
  • .top和网站宝鸡网站seo
  • 上海杨浦网站建设免费网站流量统计
  • 做彩页素材的网站今日国内最新新闻
  • 怎么做班级网站百度官网网站首页
  • 太古楼角原网站建设如何建立网站服务器
  • 政府工程招标网站杭州seo代理公司
  • 路北网站制作一键关键词优化
  • 淘宝客网站建设任务成人培训机构
  • 用时时彩做网赚的网站是真的吗单页网站怎么优化
  • 建设网站时候应该注意哪些商丘网站seo
  • 网站做跳转谷歌seo运营
  • 日本插画网站有哪些扫描图片找原图
  • 网站里面发消息怎么做超链接网站查询器
  • vs 网站项目网络营销专业是干嘛的
  • 一个企业为什么要建设网站app推广代理
  • 万州哪里有做网站的最新军事新闻今日最新消息
  • 做泥水上哪个网站找事做免费大数据平台
  • 好用的在线设计网站百度关键词优化曝光行者seo
  • 浙江做网站公司排名国外搜索引擎优化
  • 企业网站建设预算表站外推广
  • 浏览器网站免费进入北京网站营销与推广