spring源码之模拟mybatis第三方对象注入
有下面几种方法
- 注解(@Service)
- XML方式
- 注解(@Bean)
- factoryBean
- spring 容器api
- 动态向容器注册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第三方对象注入相关推荐
- spring源码之模拟mybatis获取Mapper
上一章说了,既然mybatis获取Mapper的时候使用的是代理,那么我们是否可以模拟实现一下. 话不多说上代码: 这样就更加清楚mapper的代理实现过程了吧. public class MySql ...
- Spring源码分析-如何获取Bean对象
导语 在上篇博客中 介绍了关于BeanFactory和FactoryBean相关的操作,并且查看了在两个操作中他们具体的代码有那些,这篇博客主要就是顺着上篇博客思路继续来分析Bean对象的获取.下 ...
- 【框架源码】Spring源码底层IOC容器加入对象的方式
1.Spring容器加入对象方式简介 使用XML配置文件 在XML配置文件中使用< bean >标签来定义Bean,通过ClassPathXmlApplicationContext等容器来 ...
- Spring源码分析(十)依赖注入源码解析3:DefaultListableBeanFactory#doResolveDependency 真正开始解析依赖项
4.2 真正开始解析依赖项(最核心方法) org.springframework.beans.factory.support.DefaultListableBeanFactory#doResolveD ...
- 还觉得看spring源码脑壳痛?掌握这套方法,阿里大门向你敞开!
目录 前言 Spring源码学习方法 1.通读Spring官方文档 2.如何正确阅读Spring源码 3.尽情去调试Spring吧 Spring核心技术知识 Spring大厂面试真题 金九银十全套面试 ...
- 《Spring源码深度解析 郝佳 第2版》JDBC、MyBatis原理
往期博客 <Spring源码深度解析 郝佳 第2版>容器的基本实现与XML文件的加载 <Spring源码深度解析 郝佳 第2版>XML标签的解析 <Spring源码深度解 ...
- Spring源码分析八:Mybatis ORM映射框架原理
文章目录 (一)Mybatis单独操作数据库程序 1.1.数据库表 1.2.建立PO 1.3.建立mapper接口映射 1.4.建立Mybatis配置文件 1.5.建立mapper映射文件 1.6.测 ...
- spring源码学习之整合Mybatis原理分析
本文主要解析spring是如何与mybatis进行整合,整合的过程中需要哪些组件的支持.以前面提到过的配置例子<spring源码学习之aop事物标签解析> 整合的过程中需要使用以下这个依赖 ...
- 源码通透-mybatis源码分析以及整合spring过程
源码通透-mybatis源码分析以及整合spring过程 mybatis源码分析版本:mybaits3 (3.5.0-SNAPSHOT) mybatis源码下载地址:https://github.co ...
最新文章
- python画柱状图代码-Python绘制堆叠柱状图的实例
- BZOJ 1685 [Usaco2005 Oct]Allowance 津贴:贪心【给硬币问题】
- 深度学习-Tensorflow2.2-图像处理{10}-图像定位/优化/图运算/及GPU优化等-22
- HDU:4185-Oil Skimming
- 程序媛计划——python数据库
- android sqlite 示例,android SQLite数据库使用示例
- 解决EXC_BAD_ACCESS错误的一种方法--NSZombieEnabled
- Linux内核中TCP协议实现的关键数据结构
- PSNR和SSIM的matlab源代码,图像质量评价指标之 PSNR 和 SSIM
- DaDa英语宣布12月31日起全面停止所有外教服务
- python基础6-函数的参数
- elementUI 学习入门之 Button 按钮
- MIUI11线刷包精简
- linux查找文件夹名称
- 冰冻三尺非一日之寒之产品观
- 「项目管理」如何使用甘特图分解项目?
- 使用Qt Designer制作软件的图形界面
- 日报2015/11/17(第一行代码读书笔记)
- [操作系统] 王道2023操作系统208页图3.26勘误
- 基于vue 在平面图上画路线图 canvas