首页 > 其他分享 >模拟mybatis接口动态注册过程

模拟mybatis接口动态注册过程

时间:2023-04-04 17:11:17浏览次数:32  
标签:容器 parameter1 实现 接口 Bean mybatis 模拟

思考

    前文提到2种方式动态加载bean到容器,这里我们模拟一下mybatis手动注册Bean到容器的过程。模拟有啥好处,主要是为了方便你理解如何手动注册Bean的过程及mybatis的设计思想。毕竟这个才是spring的核心内容。

    首先思考一下问题

    如果你实现这个问题,你准备怎么实现???

    个人感觉核心点就只有3个

          1,如何将接口的具体的内容实现,毕竟我们只有接口+XML内容,木有具体的实现

          2,如何将实现加入IOC容器中

          3,需要一个入口加载上述步骤

需要实现考虑的点

1,如何屏蔽复杂Bean创建过程

       为啥会抛出这个问题,主要是为了引出FactoryBean存在的意义,spring构建Bean实例是通过反射来如:class.forName("全路径名"),但是如果这个时候,bean的实例化需要依赖各种外部(构造方法参数比较多,这些参数的来源比较杂,参数来源于本地环境,XML,数据库等等,和平时无参构造不同)这个时候就没法通过直接反射来完成啦。

      这个时候可以考虑实现FactoryBean接口(实际业务中,基本上很少使用,但是源码中大量使用,只需要记住复杂的Bean的实例化过程可以考虑FactoryBean即可)

public class C implements FactoryBean {
public C(String parameter1,String parameter2){
this.parameter1 = parameter1;
this.parameter2 = parameter2;
}
private String parameter1;
private String parameter2;
@Override
public Object getObject() throws Exception {
/**
* parameter1,parameter2 依赖外部数据,
* 可以在这里初始化
* 考虑在这个地方写Bean的初始化
*/
return new C("111","222");
}

@Override
public Class<?> getObjectType() {
return null;
}
}

 

2,spring如何知道要扫描那些类,并且自动要加到容器中

     肯定是通过某个注解标记要扫描那些类,这个肯定就是一切的开始 ,如:

@MapperScan(basePackages = "*****")

3,mybatis只有接口,木有实现,这个问题怎么处理

      毫不犹豫这个是通过代理来实现的。这个不能随便乱用(适用场景有限)mybatis之所以能用的根本原因,所有的接口的具体实现,最后就是4个实现"增删改查"。

4,spring如何裁剪bean的定义(比如添加,删除,修改IOC容器中的Bean)

       其实讨论这个意义不是很大,抛却技术的实现的必要性,完全可以避免Bean的裁剪(比如:我们一定是先定义好BeanDefinition,在加入容器,没必要加入容器后在取出来进行裁剪),这个东西只是让你多一个思路。

      要支持Bean的裁剪实现BeanDefinitionRegistryPostProcessor接口即可

实现DEMO

       模拟mybatis向IOC容器注册过程基本思路

       实现基本思路

 

 

 

 

 

      技术阅读路线

 

 

      源码位置:https://gitee.com/WuWuYaoWang/shardingsphere-demo-5.2.0

标签:容器,parameter1,实现,接口,Bean,mybatis,模拟
From: https://www.cnblogs.com/huxuhong/p/17287112.html

相关文章

  • linux之stress(模拟压力测试)
    stress是一款模拟压力测试工具,他可以模拟cpu,内存,io等情况stress安装yuminstall-yepel-releaseyuminstallstress-ystress的使用1.模拟一颗cpu打满->stress-c1  通过htop查看一下cpu情况,可以看到有一颗cpu打满 2.模拟多颗cpu打满->stres......
  • 【Spring原理分析-Aware接口&InitializingBean&初始化与销毁执行顺序】
    一、Aware接口&InitializingBean1、基础准备2、总结3、补充:EmbeddedValueResolverAware二、@Autowired和@PostConstruct注解失效1、基础准备2、失效情形3、失效原因4、使用Aware接口避免失效5、总结补充总结一、Aware接口&InitializingBean1、基础准备①编写MyBean实......
  • MyBatis-Plus 写 Join 联表查询
    效果展示背景众所周知,MybatisPlus封装的mapper不支持join,如果需要支持就必须自己去实现。但是对于大部分的业务场景来说,都需要多表join,要不然就没必要采用关系型数据库了。使用方法仓库地址https://gitee.com/best_handsome/mybatis-plus-join安装Maven<depend......
  • java抽象类和接口
    abstract由abstract关键字修饰的类称为抽象类,可以将某些类共有的行为抽象出来,形成约束,提高开发效率。//抽象类publicabstractclassAction{//抽象方法,只有方法名字,没有方法的实现publicabstractvoiddoSth();}抽象类不可以通过new关键字创建实例抽象类中可以有......
  • MyBatis的执行流程及核心组件
    MyBatis的执行流程及核心组件如图所示。基本组件介绍Configuration用于描述MyBatis的主配置信息,其他组件需要获取配置信息时,直接通过Configuration对象获取。除此之外,MyBatis在应用启动时,将Mapper配置信息、类型别名、TypeHandler等注册到Configuration组件中,其他组件需要这......
  • MyBatisPlus——条件查询——null值处理与查询投影
    DQL编程控制条件查询——设置查询条件格式一:常规格式 //方式一:按条件查询 QueryWrapperqw=newQueryWrapper(); //10岁到30岁之间的用户 qw.gt("age",10); qw.lt("age",30); List<User>users=userDao.selectList(qw); System.out.println(users);格式......
  • 算法训练——剑指offer(模拟算法)
    摘要一、模拟算法原理与解题方法二、模拟算法练习题目2.1顺时针打印矩阵顺时针打印矩阵_牛客题霸_牛客网解题思路:递归的思想和非递归的思想相差不大,递归是首先打印最外层的元素,将内层的矩阵作为一个全新的矩阵进行递归。对于每层,从左上方开始以顺时针的顺序遍历所有元素。假设当......
  • 淘宝关键词搜索分析商品价格走势,商品列表接口
    淘宝API接口就是第三方软件公司,通过开放平台接入淘宝数据,并进行再开发,将功能封装打包成函数,客户只需要传入参数,接收返回值就可以实现具体功能。   淘宝关键词搜索分析价格销量接口商品价格走势(商品列表接口,分类ID采集精准商品数据接口)接口代码对接流程:taobao.item_searc......
  • 数学建模(三):模拟退火算法(SA)
    目录模拟退火算法(SA)一、概述1、算法简介2、核心思想3、数学原理4、模拟退火的流程二、实例分析1、初始化参数2、Metrospolis准则3、生成新的值4、获取最优值5、主程序6、总代码模拟退火算法(SA)一、概述1、算法简介模拟退火算法(simulatedannealing,SA)来源于固体......
  • 混沌工程之ChaosMesh使用之一模拟CPU使用率
    今天来玩一下混沌工程的开源工具之一的ChaosMesh。ChaosMesh的目标是要做一个通用的混沌测试工具。ChaosMesh是要和k8s结合使用的,其中用了云原生的能力。 ChaosMesh的基本工作流原理图:从原理图上可以看出大概的工作流程:用户用yaml文件或k8s客户端创建更新Chaos对象。Chaos-mesh......