JAVA JDK 动态代理以及Mybatis的理解
来源:互联网 发布:因子分解机 推荐算法 编辑:程序博客网 时间:2024/06/11 19:50
AspectJ
ASM
CgLib
javassist
JAVA JDK Proxy
一.JAVA JDK Proxy是一个以实现接口动态创建类的API。在使用java proxy创建及实例化类时,至少实例化两个类,一个是由JVM自动实例化的类,一个是InvocationHandler,至于是否实例化要被代理的类,要看需要。MyBatis只实例化前两个类,MyBatis并不需要真的代理其他类。
如:
1.这是一个接口:
@Mapperpublic interface CRMGateWayRequestInfoMapper { List<GatewayRequestInfo> queryRequestSerialNo(Map<String,Object> param); int countByCond(Map<String,Object> param);}
2.MyBatis通过代理实现这个接口:
1)InvocationHandler
2)Proxy.newProxyInstancepublic class MapperProxy<T> implements InvocationHandler, Serializable {@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable { if (Object.class.equals(method.getDeclaringClass())) { try { return method.invoke(this, args); } catch (Throwable t) { throw ExceptionUtil.unwrapThrowable(t); } } final MapperMethod mapperMethod = cachedMapperMethod(method); return mapperMethod.execute(sqlSession, args);}}
public class MapperProxyFactory<T> {
@SuppressWarnings("unchecked")protected T newInstance(MapperProxy<T> mapperProxy) { return (T) Proxy.newProxyInstance(mapperInterface.getClassLoader(), new Class[] { mapperInterface }, mapperProxy);}
}
从上面的代码可以看出MyBatis并没有代理实际的类(invoke方法中执行的是mapperMethod.execute)。
这个例子加深了我对JAVA Proxy的概念理解。Proxy是一个由JVM自动创建的类对象,它实现了传递的接口。
0 0
- JAVA JDK 动态代理以及Mybatis的理解
- 关于java JDK动态代理的浅显理解
- <JAVA>通过JDK创建动态代理的理解
- 深入理解JAVA JDK动态代理机制
- 深入理解JAVA JDK动态代理机制
- Java动态代理简单理解JDK
- Java的JDK动态代理
- 关于JDK动态代理的理解
- 深入理解 jdk 动态代理的实现
- JDK的动态代理实现原理理解
- JDK 动态代理的简单理解
- JDK 动态代理的简单理解
- 关于JDK动态代理的一点理解
- jdk动态代理的初步理解
- jdk动态代理和cglib代理的理解
- 动态代理--java jdk
- java jdk动态代理
- Java JDK动态代理
- 2048-C语言版
- Android缓存机制&一个缓存框架推荐
- EL表达式和JSTL
- 解决了winscp连接不上的问题
- HBase (1)---数据模型
- JAVA JDK 动态代理以及Mybatis的理解
- 解决jquery.js在myeclipse中报错的问题
- remove()与 empty()的区别
- PHP去除字符串中的中文字符
- 网页设计课程之《”信息中心”网站的搭建》-网站规划(一)
- 网络请求工具类之OkHttp3封装(一)(支持缓存、日志、拦截器等)
- 第13周-阅读程序(3)纯虚函数
- bad symbolic reference. A signature in RDD.class refers to term hadoop in package org.apache which i
- RecyclerView设置onItemClickListener