有下面几种方法

  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. 【C++】Google C++编码规范(二):类
  2. mysql存储过程分析
  3. Java面试题-javaweb篇七
  4. Lucene教程具体解释
  5. 如何用python计算工资-手把手用Python教你分析运筹学薪资状况
  6. git常见问题解决办法
  7. 10.8 ss:查看网络状态
  8. 深度学习简介(一)——卷积神经网络
  9. 过了双十一之后的你。。| 今日最佳
  10. axis2 wsdl2java 使用方式
  11. PHP数组的访问方法有几种,数组常用方法有哪些
  12. simbert文本相似度,短文本语义匹配模型
  13. druid seata 配置_架构设计 | 基于Seata中间件,微服务模式下事务管理
  14. 架构选型,究竟啥时候选redis?
  15. python open 函数漏洞_Python系列之——编写已知漏洞exp实现批量getshell
  16. 计算二叉树叶子结点数目(C语言)
  17. VSCODE Vue插件
  18. phyton list排序
  19. 惠普触控板使用指南_惠普笔记本关闭触摸板【操作思路】
  20. Java实现首字母大写

热门文章

  1. 智能玻璃温室是什么样子的
  2. 【Aviator】(一)初识 表达式引擎
  3. 【系统】日文系统中将日文键盘修改为英文键盘
  4. 百度分享和bshare
  5. 素数定理(素数的分布)
  6. 如何从std :: ostream派生实现自定义的输出流类
  7. linux内核alarm,linux中alarm函数的实例讲解
  8. ElasticSearch系列——倒排索引、删除映射类型、打分机制、配置文件、常见错误
  9. 【位运算】起床困难综合症(包含错误思路点拨)
  10. AppArmor零知识学习一、初识