JDK动态代理机制
实现代码
接口类
1 package com.lzp.springbootdemo.proxy.dynamicproxy; 2 3 /** 4 * @Author 14715 5 * @Date 2022/5/9 11:39 6 * @Version 1.0 7 * 8 * 厂家 9 */ 10 public interface UFactory { 11 12 // 卖U盘 13 double soldU(); 14 15 }
实现类
1 package com.lzp.springbootdemo.proxy.dynamicproxy; 2 3 /** 4 * @Author 14715 5 * @Date 2022/5/9 12:19 6 * @Version 1.0 7 */ 8 public class UFactoryImpl implements UFactory{ 9 10 @Override 11 public double soldU() { 12 return 25.5; 13 } 14 15 }
动态代理类
1 package com.lzp.springbootdemo.proxy.dynamicproxy; 2 3 import java.lang.reflect.InvocationHandler; 4 import java.lang.reflect.Method; 5 import java.lang.reflect.Proxy; 6 7 /** 8 * @Author 14715 9 * @Date 2022/5/9 12:19 10 * @Version 1.0 11 */ 12 public class ProxyFactory implements InvocationHandler { 13 14 private Object target; 15 16 public ProxyFactory(Object target) { 17 this.target = target; 18 } 19 20 @Override 21 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { 22 System.out.println("代理对象调用开始"); 23 Object result = method.invoke(target, args); 24 // 增强功能 25 if (result != null) { 26 result = (double) result + 10; 27 } 28 System.out.println("代理对象调用结束"); 29 return result; 30 } 31 32 public <T> T getDynamicInstance(Class<T> ... classes) { 33 return (T) Proxy.newProxyInstance(target.getClass().getClassLoader(), classes, this); 34 } 35 36 }
测试类
1 package com.lzp.springbootdemo.proxy.dynamicproxy; 2 3 /** 4 * @Author 14715 5 * @Date 2022/5/9 12:22 6 * @Version 1.0 7 */ 8 public class ClientTest { 9 public static void main(String[] args) { 10 ProxyFactory proxyFactory = new ProxyFactory(new UFactoryImpl()); 11 UFactory dynamicInstance = proxyFactory.getDynamicInstance(UFactory.class); 12 double v = dynamicInstance.soldU(); 13 System.out.println(v); 14 } 15 }
测试效果