JDK代理的原理是怎样的,代码如何实现? 主要是JDK代理在实际中运用首先JDK代理的一个原理是什么,哪些实际用到了JDK的代理使用JDK代理的真正好处是什么,以及代码是如何实现的 ?不吝赐教! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我个人认为: JDK代理的底层用的就是代理模式,这个模式你应该知道吧(两个类之间本来没什么联系但是它们之间因为某种原因又想相互调用,这个时候你就应该再new个类,让它们通过这个新类去间接的调用) 就比如说咱们JAVA编译器吧,它不是直接和操作系统通信,而是通过JVM来间接的和操作系统打交道 JVM所扮演的角色就是代理 楼主可以参考一下这个帖子“主题:JDK的动态代理是如何实现的?”里面有实例和原理讲解,讲的不错的 不是有一本书专门讲JDK原理的吗?是什么名字啊?知道的告下,谢谢 package com.bjsxt.spring;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class SecurityHandler implements InvocationHandler { private Object targetObject; public Object newProxy(Object targetObject) { this.targetObject = targetObject; return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(), targetObject.getClass().getInterfaces(), this); } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { checkSecurity(); Object ret = null; try { ret = method.invoke(this.targetObject, args); }catch(Exception e) { e.printStackTrace(); throw new java.lang.RuntimeException(e); } return ret; } private void checkSecurity() { System.out.println("----------checkSecurity()---------------"); } } 有人愿意举一例 用JDK动态代理和不用JDK动态代理去实现某一个功能来看一下JDK动态代理有什么好处总感觉这东西 看了好几遍 没看出什么味道 没看出有什么好处出来而且对原理也半天不理解 JDK 的动态代理有个缺点,就是被代理类中的方法必须出现在接口中,否则无法实现代理。除了 JDK 中有动态代理之外,Cglib 也有动态代理,Cglib 采用的是 ASM 字节码工具直接修改字节码而产生的代理类,Cglib 的动态代理的类不需要实现什么接口。当然了,JDK 和 Cglib 的动态代理在代理速度上是相辅相成的,Cglib 在创建代理对象上的时间要比 JDK 的时间长,但是代理对象的性能要比 JDK 高。如果是采用单例模式,不需要频繁创建代理对象的话,建议采用 Cglib,否则采用 JDK。另外,动态代理是面向切面编程的基础。动态代理可以做的事情很多,比如声明式事务管理、连接池中连接管理、切面级的方法增强等等。 求用过native swing的大神帮忙 如何将线程依据任务来划分,谢谢。 oracle 问题(现在分不够) Vector为什么可以使用Enumeration的方法? 关于包路径的问题. BufferControl 是什么,介绍下 新手:XML在编程中有什么用途? 1+1/2+1/3+*****************+1/n 怎么出不来 请问各位JAVA高手,java 可以动态定义数组吗,或有类似VB中的collection这样的数据类型??? 请教各位大神一个关于从控制台输入未知行数数据的问题 请问Java源程序 编译后 内存占用时如何计算的? 关于OO
JDK代理的底层用的就是代理模式,这个模式你应该知道吧(两个类之间本来没什么联系但是它们之间因为某种
原因又想相互调用,这个时候你就应该再new个类,让它们通过这个新类去间接的调用)
就比如说咱们JAVA编译器吧,它不是直接和操作系统通信,而是通过JVM来间接的和操作系统打交道
“主题:JDK的动态代理是如何实现的?”
里面有实例和原理讲解,讲的不错的
package com.bjsxt.spring;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;public class SecurityHandler implements InvocationHandler { private Object targetObject;
public Object newProxy(Object targetObject) {
this.targetObject = targetObject;
return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(),
targetObject.getClass().getInterfaces(),
this);
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
checkSecurity();
Object ret = null;
try {
ret = method.invoke(this.targetObject, args);
}catch(Exception e) {
e.printStackTrace();
throw new java.lang.RuntimeException(e);
}
return ret;
} private void checkSecurity() {
System.out.println("----------checkSecurity()---------------");
}
}
用JDK动态代理和不用JDK动态代理去实现某一个功能
来看一下JDK动态代理有什么好处
总感觉这东西 看了好几遍 没看出什么味道 没看出有什么好处出来
而且对原理也半天不理解
除了 JDK 中有动态代理之外,Cglib 也有动态代理,Cglib 采用的是 ASM 字节码工具直
接修改字节码而产生的代理类,Cglib 的动态代理的类不需要实现什么接口。当然了,JDK 和 Cglib 的动态代理在代理速度上是相辅相成的,Cglib 在创建代理对象上
的时间要比 JDK 的时间长,但是代理对象的性能要比 JDK 高。如果是采用单例模式,不需要频繁创建代理对象的话,建议采用 Cglib,否则采用 JDK。另外,动态代理是面向切面编程的基础。动态代理可以做的事情很多,比如声明式事务管理、连接池中连接管理、切面级的方法
增强等等。