Spring 动态代理
以mybatis-spring为例子讲下Spring的动态代理过程。
mybatis官网:https://mybatis.org/mybatis-3/zh
- 动态代理的关键
- 新建
JDK的动态代理。
1 | Proxy.newProxyInstance(mapperInterface.getClassLoader(), new Class[] { mapperInterface }, mapperProxy); |
mapperProxy实现了InvocationHanlder
mapperInterface是这个new出来的类接口。接口与实现是分开的。
mybatis的关键点:
1 | final MapperProxy<T> mapperProxy = new MapperProxy<T>(sqlSession, mapperInterface, methodCache); |
sqlSession在这里传入 MapperProxy
MapperProxy又调用MapperMethod
Mybatis Mapper具体的代理方法的实现在这里
MybatisMapperRegistry.addMapper(Class)
1 | MybatisMapperAnnotationBuilder parser = new MybatisMapperAnnotationBuilder(config, type); |
MybatisMapperAnnotationBuilder
1 | @Override |
mybatis两种:
初始化
执行过程