源码分析 | 手写mybait-spring核心功能(干货好文一次学会工厂bean、类代理、bean注册的使用)
2020-06-09 21:49
519 查看
![](https://img2020.cnblogs.com/blog/2030202/202006/2030202-20200609215006431-1003784316.jpg)
作者:小傅哥
博客:[https://bugstack.cn](https://bugstack.cn) - `汇总系列原创专题文章`
>沉淀、分享、成长,让自己和他人都能有所收获!😄
## 一、前言介绍
一个知识点的学习过程基本分为;运行helloworld、熟练使用api、源码分析、核心专家。在分析mybaits以及mybatis-spring源码之前,我也只是简单的使用,因为它好用。但是他是怎么做的多半是凭自己的经验去分析,但始终觉得这样的感觉缺少点什么,在几次夙兴夜寐,靡有朝矣之后决定彻底的研究一下,之后在去仿照着写一版核心功能。依次来补全自己的技术栈的空缺。在现在技术知识像爆炸一样迸发,而我们多半又忙于工作业务开发。就像一个不会修车的老司机,只能一脚油门,一脚刹车的奔波。车速很快,但经不起坏,累觉不爱。好!为了解决这样问题,也为了钱程似锦(形容钱多的想家里的棉布一样),努力!
**开动之前先庆祝下我的iPhone4s又活了,还是那么好用(*嗯!有点卡*);**
>![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91c2VyLWdvbGQtY2RuLnhpdHUuaW8vMjAyMC8xLzIwLzE2ZmMwZjliNTFjNWUzNGM?x-oss-process=image/format,png)
## 二、以往章节
关于mybaits & spring 源码分析以及demo功能的章节汇总,可以通过下列内容进行系统的学习,同时以下章节会有部分内容涉及到demo版本的mybaits;
- [源码分析 | Mybatis接口没有实现类为什么可以执行增删改查](https://bugstack.cn/itstack-demo-any/2019/12/25/%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90-Mybatis%E6%8E%A5%E5%8F%A3%E6%B2%A1%E6%9C%89%E5%AE%9E%E7%8E%B0%E7%B1%BB%E4%B8%BA%E4%BB%80%E4%B9%88%E5%8F%AF%E4%BB%A5%E6%89%A7%E8%A1%8C%E5%A2%9E%E5%88%A0%E6%94%B9%E6%9F%A5.html)
- [源码分析 | 像盗墓一样分析Spring是怎么初始化xml并注册bean的](https://bugstack.cn/itstack-demo-any/2020/01/08/%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90-%E5%83%8F%E7%9B%97%E5%A2%93%E4%B8%80%E6%A0%B7%E5%88%86%E6%9E%90Spring%E6%98%AF%E6%80%8E%E4%B9%88%E5%88%9D%E5%A7%8B%E5%8C%96xml%E5%B9%B6%E6%B3%A8%E5%86%8Cbean%E7%9A%84.html)
- [源码分析 | 基于jdbc实现一个Demo版的Mybatis](https://bugstack.cn/itstack-demo-any/2020/01/13/%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90-%E5%9F%BA%E4%BA%8Ejdbc%E5%AE%9E%E7%8E%B0%E4%B8%80%E4%B8%AADemo%E7%89%88%E7%9A%84Mybatis.html)
## 三、一碟小菜类代理
往往从最简单的内容才有抓手。先看一个接口到实现类的使用,在将这部分内容转换为代理类。
### 1. 定义一个 IUserDao 接口并实现这个接口类
```java
public interface IUserDao {
String queryUserInfo();
}
public class UserDao implements IUserDao {
@Override
public String queryUserInfo() {
return "实现类";
}
}
```
### 2. new() 方式实例化
```java
IUserDao userDao = new UserDao();
userDao.queryUserInfo();
```
这是最简单的也是最常用的使用方式,new 个对象。
### 3. proxy 方式实例化
```java
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
Class[] classes = {IUserDao.class};
InvocationHandler handler = (proxy, method, args) -> "你被代理了 " + method.getName();
IUserDao userDao = (IUserDao) Proxy.newProxyInstance(classLoader, classes, handler);
String res = userDao.queryUserInfo();
logger.info("测试结果:{}", res);
```
- Proxy.newProxyInstance 代理类实例化方式,对应传入类的参数即可
- ClassLoader,是这个类加载器,我们可以获取当前线程的类加载器
- InvocationHandler 是代理后实际操作方法执行的内容,在这里可以添加自己业务场景需要的逻辑,在这里我们只返回方法名
**测试结果:**
```java
23:20:18.841 [main] INFO org.itstack.demo.test.ApiTest - 测试结果:你被代理了 queryUserInfo
Process finished with exit code 0
```
## 四、盛宴来自Bean工厂
在使用Spring的时候,我们会采用注册或配置文件的方式,将我们的类交给Spring管理。例如;
```java
相关文章推荐
- 源码分析 | 手写mybait-spring核心功能(干货好文一次学会工厂bean、类代理、bean注册的使用)
- 源码分析 | 像盗墓一样分析Spring是怎么初始化xml并注册bean的
- Spring源码分析之ProxyFactoryBean方式实现Aop功能的分析
- spring IOC源码分析(一)bean工厂的创建加载过程
- spring源码分析(2)——Bean 定义的解析与Bean的注册
- Spring源码分析之配置文件加载并注册Bean
- Spring源码分析--代理模式、工厂模式
- Spring源码分析心得-Bean的读取和注册
- SSM-Spring-11:Spring中使用代理工厂Bean实现aop的四种增强
- 【spring源码分析】--Bean的解析与注册
- Spring IoC 源码分析 (基于注解) 之 Bean的解析与注册
- Spring 源码分析(二) —— 核心容器
- spring核心:bean工厂的装配 2
- 8.5.2: Spring的事务---使用TransactionProxyFactoryBean创建事务代理
- 使用Spring配置实现bean工厂
- 关于spring.net的面向切面编程 (Aspect Oriented Programming with Spring.NET)-使用工厂创建代理(Using the ProxyFactoryObject to create AOP proxies)
- spring核心:bean工厂的装配 4
- 使用spring的特殊bean --- 对bean进行后处理和对bean工厂进行后处理简单了解
- 菜鸟看spring源码(0)之BeanFactory的注册与依赖绑定
- 通读AFN②--AFN的上传和下载功能分析、SessionTask及相应的session代理方法的使用细节