Proxy 实现动态代理js proxy代理
文件结构:
- Child.class [Interface]
- ChildImpl.class
- MyProxy.class [Test Class]
一、Child.class
package proxys; public interface Child { void eat(); }二、ChildImpl.class
package proxys; public class ChildImpl implements Child { @Override public void eat() { System.out.println("Child eating..."); } }三、MyProxy.class
package proxys; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; /** * 基于接口的动态代理: Proxy, InvocationHandler */ public class MyProxy { /** * Test Method * @param args 参数列表 */ public static void main(String[] args) { // 未使用代理模式 ChildImpl child = new ChildImpl(); child.eat(); // 使用动态代理增强日志功能 System.out.println(); Child proxyObj = getProxyObj(child, Child.class); proxyObj.eat(); } /** * 获取代理对象 * @param obj 被代理的对象 * @param interfaceType 被代理方法所属的接口类型 * @return 代理对象 */ public static <I> I getProxyObj(Object obj, Class<I> interfaceType) { // 接口类型检查, 因为 Proxy 是基于接口的动态代理 Class<?>[] type = null; Class<?>[] interfaces = obj.getClass().getInterfaces(); for (Class<?> anInterface : interfaces) { if (anInterface.equals(interfaceType)) { type = new Class[]{anInterface}; break; } } if (null == type) { throw new ClassCastException("无法将对象 " + obj + " 代理为 " + interfaceType.getName()); } Object o = Proxy.newProxyInstance(obj.getClass().getClassLoader(), type, new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // 增强调用前的功能 System.out.println("[" + method.getName() + "] Proxy begin..."); // 调用被代理对象的方法 Object ret = method.invoke(obj, args); // 增强调用后的功能 System.out.println("[" + method.getName() + "] Proxy end..."); return ret; } }); return (I) o; } }运行结果:
Child eating... [eat] Proxy begin... Child eating... [eat] Proxy end...【java项目实战】代理模式(Proxy Pattern),静态代理 VS 动态代理java proxy 动态代理
Java动态代理的两种实现方法:JDK动态代理和CGLIB动态代理jdk静态代理和动态代理
Java动态代理之JDK动态代理和CGLib动态代理jdk动态代理
谁与争锋,JDK动态代理大战CGLib动态代理jdk动态代理和cglib动态代理
代理/动态代理(Proxy)模式java proxy 动态代理
爬虫-ProxyHandler代理类-通过代理发起请求js proxy代理
正向代理 forward proxy、反向代理 reverse proxy、透明代理 transparent proxy反向代理与正向代理