springboot源码解读二-----(自动配置原理解析下)

源码注释环境

  • jdk 1.8 +
  • springboot 2.7.x
  • idea 2022
  • win 10

通过上文《自动配置原理解析一》我们知道了自动装配的方法,最终通过process获取需要自动装配的类,那个process是由谁调用的? 整个调用链又是如何? 本文将给你 答案。

AutoConfigurationImportSelector.class 调用链

  1. ConfigurationClassParser中有一个 内部静态类 : DeferredImportSelectorGrouping

    DeferredImportSelectorGrouping类(的 getImports 方法 )是整个自动装配调用链的开始。

    // 自动装配整个调用链的开始,从调用该类的 getImports 方法开始。
    private static class DeferredImportSelectorGrouping {
    		
    		// 这个 group 对应的就是 AutoConfigurationGroup 类。(AutoConfigurationGroup 也是实现了 DeferredImportSelector.Group )
    		private final DeferredImportSelector.Group group;
    
    		private final List<DeferredImportSelectorHolder> deferredImports = new ArrayList<>();
    
    		DeferredImportSelectorGrouping(Group group) {
    			this.group = group;
    		}
    
    		public void add(DeferredImportSelectorHolder deferredImport) {
    			this.deferredImports.add(deferredImport);
    		}
    
    		// getImports 自动配置调用链 的开始
    		/**
    		 * Return the imports defined by the group.
    		 * @return each import with its associated configuration class
    		 */
    		public Iterable<Group.Entry> getImports() {
    			for (DeferredImportSelectorHolder deferredImport : this.deferredImports) {
    				// 循环 调用  AutoConfigurationGroup 的 process 方法,装载所有的自动配置类
    				// deferredImport.getConfigurationClass().getMetadata() 注解元信息
    				// deferredImport.getImportSelector() 使用指定的DeferredImportSelector处理导入类的AnnotationMetadata。
    				this.group.process(deferredImport.getConfigurationClass().getMetadata(),
    						deferredImport.getImportSelector());
    			}
    			// 调用  AutoConfigurationGroup 的 selectImports方法,对 自动装配的类进行排序
    			return this.group.selectImports();
    		}
    
    		public Predicate<String> getCandidateFilter() {
    			Predicate<String> mergedFilter = DEFAULT_EXCLUSION_FILTER;
    			for (DeferredImportSelectorHolder deferredImport : this.deferredImports) {
    				Predicate<String> selectorFilter = deferredImport.getImportSelector().getExclusionFilter();
    				if (selectorFilter != null) {
    					mergedFilter = mergedFilter.or(selectorFilter);
    				}
    			}
    			return mergedFilter;
    		}
    	}
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
springboot uview-ui商城源码是一个使用了Spring Boot和uView-UI开发的电商平台的源代码。它提供了一个完整的电商平台的基础功能和界面设计,方便开发者进行次开发和定制。 该源码采用了Spring Boot框架作为后端的开发框架,Spring Boot是一个快速开发Java应用程序的框架,它可以帮助开发者快速搭建基于Java的Web应用程序。而uView-UI是一个基于Vue.js的UI组件库,它提供了丰富的界面组件和样式,帮助开发者快速构建漂亮的前端界面。 该商城源码包含了用户管理、商品管理、订单管理等基本功能模块。用户管理模块可以实现用户注册、登录、个人信息修改等操作;商品管理模块可以实现商品的添加、编辑、删除等操作;订单管理模块可以实现订单的查询、支付、取消等操作。 此外,该商城源码还包含了购物车、搜索功能、商品详情页等重要功能。购物车功能可以实现商品的添加、删除、数量修改等操作;搜索功能可以实现关键词的检索,并显示与关键词相关的商品列表;商品详情页可以显示商品的详细信息,包括图片、价格、库存等。 开发者可以根据自己的需求进行次开发和定制,例如可以添加更多的功能模块、修改样式和布局、集成支付接口等。同时,由于该源码使用了Spring Boot和uView-UI这两个流行的框架,开发者可以借助它们的丰富生态系统和社区支持,更高效地开发和维护电商平台。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ITzhongzi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值