Android注解学习之了解Java动态代理Proxy
2017-03-31 11:46
573 查看
直接来看代码:
首先了解一下动态代理的关键词:
InvocationHandler:
Proxy:
详细学习动态代理请看博客:http://www.ibm.com/developerworks/cn/java/j-lo-proxy1/;
首先了解一下动态代理的关键词:
InvocationHandler:
1.java.lang.reflect.InvocationHandler: 这是调用处理器接口,它自定义了一个 invoke 方法,用于集中处理在动态代理类对象上的方法调用,通常在该方法中实现对委托类的代理访问。 2. InvocationHandler 的核心方法 第一个参数既是代理类实例, 第二个参数是被调用的方法对象 第三个方法是调用参数。 调用处理器根据这三个参数进行预处理或分派到委托类实例上发射执行 Object invoke(Object proxy, Method method, Object[] args)
Proxy:
1.java.lang.reflect.Proxy: 这是 Java 动态代理机制的主类,它提供了一组静态方法来为一组接口动态地生成代理类及其对象。 2.. Proxy 的静态方法 // 方法 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)
package com.example.xzw.jpushtestdemo.view; import java.lang.ref.WeakReference; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.util.HashMap; /** * 实现InvocationHandler接口的调用处理器类,这是个固定的代码; * Created by xzw on 2017/3/30. */ public class DynamicHandler implements InvocationHandler { private WeakReference<Object> handlerRef; private final HashMap<String, Method> hashMap = new HashMap<>(1); //通过构造方式,获取委托类,并用弱应用保存; public DynamicHandler(Object handler) { this.handlerRef = new WeakReference<Object>(handler); } public void addMethod(String name, Method method) { hashMap.put(name, method); } public Object getHandler() { return handlerRef.get(); } public void setHandler(Object handlerRef) { this.handlerRef = new WeakReference<Object>(handlerRef); } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { //从弱应用中获取委托类 Object object = handlerRef.get(); if (object != null) { //根据代理类的方法method,获取方法名methodName String methodName = method.getName(); //根据方法名methodName在hashMap集合中获取注解方法method; method = hashMap.get(methodName); if (method != null) { //利用反射,委托类调用method方法,参数为args return method.invoke(object, args); } } return null; } }
详细学习动态代理请看博客:http://www.ibm.com/developerworks/cn/java/j-lo-proxy1/;
相关文章推荐
- java 动态代理学习(Proxy,InvocationHandler)
- Java基础学习总结——动态代理技术(Proxy)
- java 动态代理学习(Proxy,InvocationHandler)
- java 动态代理学习(Proxy,InvocationHandler)
- java 动态代理学习(Proxy,InvocationHandler)
- java 动态代理学习(Proxy,InvocationHandler)
- java 动态代理学习(Proxy,InvocationHandler)——自己的理解
- 【JavaWeb-14】代理Proxy、动态代理、AOP编程思想、注解、元注解、类加载器
- java 动态代理学习(Proxy,InvocationHandler)
- Android插件化开发基础之Java动态代理(proxy)机制的简单例子
- java 动态代理学习(Proxy,InvocationHandler)
- 转载:java 动态代理学习(Proxy,InvocationHandler)
- Java动态代理Proxy学习
- Java-马士兵设计模式学习笔记-代理模式-动态代理 调用Proxy.newProxyInstance()
- java动态代理学习笔记
- java的动态代理学习总结
- Java动态代理学习文章(二)
- java 动态代理深度学习
- java 之 动态代理学习示例
- Java动态代理InvocationHandler+Proxy