1、定义一个接口 2、定义一个类来实现该接口 3、使用proxy来动态获取对象的方法,并通过三种不同的方法来增强实体对象的方法(参数增强,返回值增强,方法体增强)package cn.hopetesting.proxy;/** * @author newcityman * @date 2019/9/13 - 15:22 */public interface SaleComputer {public String sale(double money); public void show();}
package cn.hopetesting.proxy;/** * @author newcityman * @date 2019/9/13 - 15:24 */public class lenovo implements SaleComputer {@Override public String sale(double money) { System.out.println("花了"+money+"元买了一台联想电脑....."); return "联想电脑"; }@Override public void show() { System.out.println("炫耀电脑"); }}
package cn.hopetesting.proxy;import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;/** * @author newcityman * @date 2019/9/13 - 15:34 */public class ProxyTest {public static void main(String[] args) {//1、创建真实对象 lenovo lenovo = new lenovo(); //2、动态代理增强Lenovo对象 /* * 三个参数 * 1、类加载器:真实对象.getClass().getClassLoader() * 2、接口数组:真实对象.getClass().getInterfaces() * 3、处理器: new InvocationHandler() * */ SaleComputer proxy_lenovo = (SaleComputer) Proxy.newProxyInstance(lenovo.getClass().getClassLoader(), lenovo.getClass().getInterfaces(), new InvocationHandler() {/** * * @param proxy 代理对象 * @param method 代理对象调用的方法,被封装为对象 * @param args 代理对象条用的方法时,传递的实际参数 * @return * @throws Throwable */ @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {/*System.out.println("动态代理的方法被执行了"); System.out.println(method.getName()); System.out.println(args[0]);*/ if (method.getName().equals("sale")) {//1、增强参数 double money = (double) args[0]; money = money * 0.85; System.out.println("专车接"); // 使用真实对象调用方法 String obj =(String) method.invoke(lenovo, money); System.out.println("免费送货。。。。。"); //增强返回值 obj = obj +"_移动硬盘"; return obj; } else { Object obj = method.invoke(lenovo, args); return obj; } } }); //2、调用方法 String computer = proxy_lenovo.sale(5000); System.out.println(computer); /* proxy_lenovo.show();*/ }}
转载于:https://www.cnblogs.com/newcityboy/p/11517237.html
转载请注明原文地址: https://mac.8miu.com/read-54629.html