JAVA代理机制详解
来源:互联网 发布:淘宝收货人搞笑名字 编辑:程序博客网 时间:2024/04/30 09:22
JAVA代理机制是十分重要的一种机制,代理是一种常用的设计模式,目的是为其他对象提供一个代理,从而控制对该对象的访问。代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理。具体可应用于日志管理、安全等问题。
- java.lang.reflect.Proxy:这是 Java 动态代理机制的主类,它提供了一组静态方法来为一组接口动态地生成代理类及其对象。
// 方法 1: 该方法用于获取指定代理对象所关联的调用处理器static InvocationHandler getInvocationHandler(Object proxy) // 方法 2:该方法用于获取关联于指定类装载器和一组接口的动态代理类的类对象static Class getProxyClass(ClassLoader loader, Class[] interfaces) // 方法 3:该方法用于判断指定类对象是否是一个动态代理类static boolean isProxyClass(Class cl) // 方法 4:该方法用于为指定类装载器、一组接口及调用处理器生成动态代理类实例static Object newProxyInstance(ClassLoader loader, Class[] interfaces, InvocationHandler h)
java.lang.reflect.InvocationHandler:这是调用处理器接口,InvocationHandler 的核心方法
// 该方法负责集中处理动态代理类上的所有方法调用。第一个参数是代理类实例,第二个参数是被调用的方法对象
// 第三个方法是调用参数。调用处理器根据这三个参数进行预处理或分派到委托类实例上发射执行Object invoke(Object proxy, Method method, Object[] args)每个实例都会关联一个调用处理器对象,可以通过 Proxy 提供的静态方法 getInvocationHandler 去获得代理类实例的调用处理器对象。在代理类实例上调用其代理的接口中所声明的方法时,这些方法最终都会由调用处理器的 invoke 方法执行.
- java.lang.ClassLoader:这是类装载器类
动态代理对象创建过程
// InvocationHandlerImpl 实现了 InvocationHandler 接口,并能实现方法调用从代理类到委托类的分派转发InvocationHandler handler = new InvocationHandlerImpl(..); // 通过 Proxy 直接创建动态代理类实例Interface proxy = (Interface)Proxy.newProxyInstance( classLoader, new Class[] { Interface.class }, handler );
实例
接口
public interface ITalk{public void talk(String name);}
public class TalkImpl implements ITalk{public void talk(String name){System.out.println("Hello,"+name);}}
动态代理类:
import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class DynimicProxy implements InvocationHandler{private Object object;public Object bind(Object object){this.object = object;return Proxy.newProxyInstance(object.getClass().getClassLoader(),object.getClass().getInterfaces(), this);}public Object invoke(Object proxy, Method method, Object[] args)throws Throwable{Object result = null;try{System.out.println("method start...");result = method.invoke(object, args);System.out.println("method end...");}catch(Exception e){e.printStackTrace();}return result;}}
一切就绪,接下来测试
public class ProxyTest{public static void main(String[] args){DynimicProxy proxy = new DynimicProxy();ITalk talk = (ITalk)proxy.bind(new TalkImpl());talk.talk("hao");}}
结果:
method start...Hello,haomethod end...
0 0
- JAVA代理机制详解
- java动态代理机制详解
- JAVA动态代理机制详解
- Java 动态代理机制详解
- java动态代理机制详解
- Java动态代理机制详解
- Java动态代理机制详解
- 详解Java动态代理机制
- 详解Java动态代理机制
- Java动态代理机制详解
- Java动态代理机制详解
- Java动态代理机制详解
- Java动态代理机制详解
- Java代理机制及动态代理和CGLIB代理详解
- java的动态代理机制详解
- java的动态代理机制详解
- Java的动态代理机制详解
- java的动态代理机制详解
- uva 10269 最短路
- 父母是座老房子
- EditText的属性
- 博客地址收藏
- 2011/06/13 android使用html做UI的方法---js与java的相互调用
- JAVA代理机制详解
- C++/C题目
- linux-Tcp IP协议栈源码阅读笔记
- 挺不错的辞职信
- FINEBI商业智能软件搭建市国税税源与征管系统
- Linux下的find和xargs命名
- SQL执行顺序
- R语言与多元统计分析 —— 多元正态分布
- cocos2d-x convertToWorldSpace和convertToNodeSpace