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