有下面几种方法

  1. 注解(@Service)
  2. XML方式
  3. 注解(@Bean)
  4. factoryBean
  5. spring 容器api
  6. 动态向容器注册beanDefinition

看到这几种方式的时候,需要我们自己思考一下,在注册这个对象之前,是需要自己手动生成的。
那么使用注解Service和XML的方式肯定是不行的,因为这个只是把一个类交给了spring容器管理,并不是生成的对象交给他。所以前两种方式不可行。
第六种方式也是不行的,至于为什么不行,我们到后面再说。

注解(@Bean)

public class BatisConfig {@Beanpublic TMapper getTMapper(){TMapper tMapper = (TMapper) MySqlSession.getMapper(TMapper.class);return tMapper;}}@Testpublic void customBatis(){AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(BatisConfig.class);TMapper mapper = context.getBean(TMapper.class);mapper.queryMap("1");}//打印结果
假装连接数据库
假装执行了查询语句select * from t where id = ${id}
假装返回了JSON串

FactoryBean

@Component
public class MyFactoryBean implements FactoryBean {@Overridepublic Object getObject() throws Exception {System.out.println("实例化了Mapper");TMapper tMapper = (TMapper) MySqlSession.getMapper(TMapper.class);return tMapper;}@Overridepublic Class<?> getObjectType() {return TMapper.class;}
}@Testpublic void customBatis(){AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();context.scan("com.spring.batis");context.refresh();TMapper mapper = context.getBean(TMapper.class);mapper.queryMap("1");}//打印结果
假装连接数据库
假装执行了查询语句select * from t where id = ${id}
假装返回了JSON串

spring 容器api手动注入

 @Testpublic void customBatis(){AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();TMapper tMapper = (TMapper) MySqlSession.getMapper(TMapper.class);context.getBeanFactory().registerSingleton("t", tMapper);context.refresh();TMapper mapper = context.getBean(TMapper.class);mapper.queryMap("1");}
//打印结果
假装连接数据库
假装执行了查询语句select * from t where id = ${id}
假装返回了JSON串

spring源码之模拟mybatis第三方对象注入相关推荐

  1. spring源码之模拟mybatis获取Mapper

    上一章说了,既然mybatis获取Mapper的时候使用的是代理,那么我们是否可以模拟实现一下. 话不多说上代码: 这样就更加清楚mapper的代理实现过程了吧. public class MySql ...

  2. Spring源码分析-如何获取Bean对象

    导语   在上篇博客中 介绍了关于BeanFactory和FactoryBean相关的操作,并且查看了在两个操作中他们具体的代码有那些,这篇博客主要就是顺着上篇博客思路继续来分析Bean对象的获取.下 ...

  3. 【框架源码】Spring源码底层IOC容器加入对象的方式

    1.Spring容器加入对象方式简介 使用XML配置文件 在XML配置文件中使用< bean >标签来定义Bean,通过ClassPathXmlApplicationContext等容器来 ...

  4. Spring源码分析(十)依赖注入源码解析3:DefaultListableBeanFactory#doResolveDependency 真正开始解析依赖项

    4.2 真正开始解析依赖项(最核心方法) org.springframework.beans.factory.support.DefaultListableBeanFactory#doResolveD ...

  5. 还觉得看spring源码脑壳痛?掌握这套方法,阿里大门向你敞开!

    目录 前言 Spring源码学习方法 1.通读Spring官方文档 2.如何正确阅读Spring源码 3.尽情去调试Spring吧 Spring核心技术知识 Spring大厂面试真题 金九银十全套面试 ...

  6. 《Spring源码深度解析 郝佳 第2版》JDBC、MyBatis原理

    往期博客 <Spring源码深度解析 郝佳 第2版>容器的基本实现与XML文件的加载 <Spring源码深度解析 郝佳 第2版>XML标签的解析 <Spring源码深度解 ...

  7. Spring源码分析八:Mybatis ORM映射框架原理

    文章目录 (一)Mybatis单独操作数据库程序 1.1.数据库表 1.2.建立PO 1.3.建立mapper接口映射 1.4.建立Mybatis配置文件 1.5.建立mapper映射文件 1.6.测 ...

  8. spring源码学习之整合Mybatis原理分析

    本文主要解析spring是如何与mybatis进行整合,整合的过程中需要哪些组件的支持.以前面提到过的配置例子<spring源码学习之aop事物标签解析> 整合的过程中需要使用以下这个依赖 ...

  9. 源码通透-mybatis源码分析以及整合spring过程

    源码通透-mybatis源码分析以及整合spring过程 mybatis源码分析版本:mybaits3 (3.5.0-SNAPSHOT) mybatis源码下载地址:https://github.co ...

最新文章

  1. python画柱状图代码-Python绘制堆叠柱状图的实例
  2. BZOJ 1685 [Usaco2005 Oct]Allowance 津贴:贪心【给硬币问题】
  3. 深度学习-Tensorflow2.2-图像处理{10}-图像定位/优化/图运算/及GPU优化等-22
  4. HDU:4185-Oil Skimming
  5. 程序媛计划——python数据库
  6. android sqlite 示例,android SQLite数据库使用示例
  7. 解决EXC_BAD_ACCESS错误的一种方法--NSZombieEnabled
  8. Linux内核中TCP协议实现的关键数据结构
  9. PSNR和SSIM的matlab源代码,图像质量评价指标之 PSNR 和 SSIM
  10. DaDa英语宣布12月31日起全面停止所有外教服务
  11. python基础6-函数的参数
  12. elementUI 学习入门之 Button 按钮
  13. MIUI11线刷包精简
  14. linux查找文件夹名称
  15. 冰冻三尺非一日之寒之产品观
  16. 「项目管理」如何使用甘特图分解项目?
  17. 使用Qt Designer制作软件的图形界面
  18. 日报2015/11/17(第一行代码读书笔记)
  19. [操作系统] 王道2023操作系统208页图3.26勘误
  20. 基于vue 在平面图上画路线图 canvas

热门文章

  1. Segment Anything Model (SAM)——卷起来了,那个号称分割一切的CV大模型他来了
  2. IPV6介绍-DNS配置-实验对比
  3. 【转】提高VR渲染速度的最好方法(经典转载)
  4. 用命令行去发掘有趣的“前十”
  5. linux下的彩蛋和各种有趣的命令
  6. 如何让学习成为一种乐趣!
  7. hmm念什么_HMM解读
  8. Python python-docx 读写 word
  9. DeviceIOControl实战
  10. 应用程序正常初始化(0xc00000ba)失败修复工具