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

策划公司网站建设google下载安装

策划公司网站建设,google下载安装,江苏镇江丹阳疫情最新消息今天,phpcms套好的网站 放到空间上 后台打开的验证码不能显示文章目录 一、Spring生命周期核心底层源码剖析—扫描1.1、Spring底层扫描机制doScan方法源码剖析 一、Spring生命周期核心底层源码剖析—扫描 1.1、Spring底层扫描机制doScan方法源码剖析 其源代码如下&#xff1a; protected Set<BeanDefinitionHolder> doScan(Strin…

文章目录

  • 一、Spring生命周期核心底层源码剖析—扫描
    • 1.1、Spring底层扫描机制doScan方法源码剖析

一、Spring生命周期核心底层源码剖析—扫描

1.1、Spring底层扫描机制doScan方法源码剖析

其源代码如下:

protected Set<BeanDefinitionHolder> doScan(String... basePackages) {Assert.notEmpty(basePackages, "At least one base package must be specified");Set<BeanDefinitionHolder> beanDefinitions = new LinkedHashSet<>();for (String basePackage : basePackages) {Set<BeanDefinition> candidates = findCandidateComponents(basePackage);//遍历其获取到的BeanDefinition对象for (BeanDefinition candidate : candidates) {//为其BeanDefinition对象进行属性赋值,例如scope,beanName等ScopeMetadata scopeMetadata = this.scopeMetadataResolver.resolveScopeMetadata(candidate);candidate.setScope(scopeMetadata.getScopeName());String beanName = this.beanNameGenerator.generateBeanName(candidate, this.registry);if (candidate instanceof AbstractBeanDefinition) {postProcessBeanDefinition((AbstractBeanDefinition) candidate, beanName);}if (candidate instanceof AnnotatedBeanDefinition) {AnnotationConfigUtils.processCommonDefinitionAnnotations((AnnotatedBeanDefinition) candidate);}//判断当前的bean是否已经在Spring容器中存在,存在需封装为BeanDefinitionHolder对象if (checkCandidate(beanName, candidate)) {BeanDefinitionHolder definitionHolder = new BeanDefinitionHolder(candidate, beanName);definitionHolder =AnnotationConfigUtils.applyScopedProxyMode(scopeMetadata, definitionHolder, this.registry);beanDefinitions.add(definitionHolder);registerBeanDefinition(definitionHolder, this.registry);}}}return beanDefinitions;}

1、其主要是通过传入的包路径进行资源加载,加载时方法为上诉代码的for循环下的第一行代码的findCandidateComponents()方法,可以详细看此方法,是如何加载资源的,其方法代码如下(具体说明以及解析过程可参考注释):

public Set<BeanDefinition> findCandidateComponents(String basePackage) {//此处主要是判断项目是否配置了相关的bean文件,若有,就不需要再逐个类进行扫描+判断是否为Beanif (this.componentsIndex != null && indexSupportsIncludeFilters()) {return addCandidateComponentsFromIndex(this.componentsIndex, basePackage);}//大部分的业务都会走如下方法else {return scanCandidateComponents(basePackage);}}//scanCandidateComponents方法具体实现为
private Set<BeanDefinition> scanCandidateComponents(String basePackage) {Set<BeanDefinition> candidates = new LinkedHashSet<>();try {//1、资源路径组装解析String packageSearchPath = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX +resolveBasePackage(basePackage) + '/' + this.resourcePattern;//2、利用类元数据读取器读取器路径下包含的资源数据Resource[] resources = getResourcePatternResolver().getResources(packageSearchPath);boolean traceEnabled = logger.isTraceEnabled();boolean debugEnabled = logger.isDebugEnabled();//3、遍历类元数据读取器获取到的资源数据(class资源文件数据)for (Resource resource : resources) {if (traceEnabled) {logger.trace("Scanning " + resource);}try {//4、获取当前类元数据(calss)具体资源信息MetadataReader metadataReader = getMetadataReaderFactory().getMetadataReader(resource);//5、判断当前的类(class)上包含的是否包含排除注解excludeFilters以及非排除注解includeFilters,以及是否包含相关的条件注解Conditionalif (isCandidateComponent(metadataReader)) {//6、创建一个BeanDefinition对象,用于封装其类特征信息,例如:beanClass、scope、lazyInit等属性ScannedGenericBeanDefinition sbd = new ScannedGenericBeanDefinition(metadataReader);//7、将类资源数据加入到BeanDefinition中sbd.setSource(resource);//8、判断当前的类资源是否是独立的(例如是否是内部类等),除此歪,需要判断其是否为接口或者抽象类,如果是抽象类,那类中必须有被Lookup注解的方法,否则不会被当做beanif (isCandidateComponent(sbd)) {if (debugEnabled) {logger.debug("Identified candidate component class: " + resource);}//9、将封装好的BeanDefinition对象加入到返回的集合Set中candidates.add(sbd);}else {if (debugEnabled) {logger.debug("Ignored because not a concrete top-level class: " + resource);}}}else {if (traceEnabled) {logger.trace("Ignored because not matching any filter: " + resource);}}}catch (FileNotFoundException ex) {if (traceEnabled) {logger.trace("Ignored non-readable " + resource + ": " + ex.getMessage());}}catch (Throwable ex) {throw new BeanDefinitionStoreException("Failed to read candidate component class: " + resource, ex);}}}catch (IOException ex) {throw new BeanDefinitionStoreException("I/O failure during classpath scanning", ex);}return candidates;}
http://www.zhongyajixie.com/news/55939.html

相关文章:

  • 域名备案和网站备案有什么区别百度广告商
  • wordpress 4.0 bug公司以优化为理由裁员合法吗
  • 访问wap网站优化排名 生客seo
  • 空调维修技术支持深圳网站建设郑州seo优化顾问阿亮
  • 网站开发保密协议范本seo关键词挖掘工具
  • 自己做的网站如何让外网访问高端网站建设哪个好
  • 做网站建设公司怎么样营销策略都有哪些
  • 中国第四冶金建设有限公司官方网站百度推广优化中心
  • 自己做的网站用国外的空间怎么样北京竞价托管代运营
  • 网站前端包括哪些建立一个企业网站需要多少钱
  • 大连网站推广工具搜索引擎优化的要点
  • 网站里弹窗怎么做百度助手下载安装
  • 婚庆网站开发背景百度关键词排名工具
  • 怎么用php自己做网站吗杭州seo网络推广
  • asp网站自动识别手机黑科技引流推广神器免费
  • 织梦cms做网站互联网广告行业
  • html5 电商网站模板国内免费顶级域名注册
  • 制作网页的网站哪个好用推广运营
  • 四川企业网站开发成都seo公司排名
  • 模拟网站平台怎么做今日要闻
  • 景区网站建设方案免费网站分析seo报告是坑吗
  • 免费网站建设公司推荐营销技巧在线完整免费观看
  • 广州开发网站建设抖音推广公司
  • 进一步加强门户网站建设的通知营销宝
  • 西安做网站印象网络百度指数官网入口登录
  • 网站建设公司排名做网站的平台有哪些
  • 手机如何申请个人邮箱百度seo关键词排名查询工具
  • 移动网站建设自助建站十大免费无代码开发软件
  • 最新某地方装修门户源码 php装饰公司程序 dede行业网站模板网络营销培训班
  • 网站怎么做电子合同如何建立网站的步骤