一、背景知识

二、两种代理模式


三、动态代理的实现

************jdk动态代理实现(需要三个类)***************



四、动态代理实现步骤(代码演示)
1、创建目标接口
package cn.goo.service; //目标接口 public interface BuyCar { void buy(); }
2、创建目标接口实现类
package cn.goo.shop; import cn.goo.service.BuyCar; //目标类:方法需要功能增强的类 public class AudiShop implements BuyCar { @Override public void buy() { System.out.println("购买了一辆奥迪汽车,花费了30w元!"); } }
3、创建InvocationHandler接口实现类
package cn.goo.handler; import cn.goo.service.BuyCar; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; public class CarInvocationHandler implements InvocationHandler { //具体需要功能增强的目标类对象 private BuyCar target; public CarInvocationHandler(BuyCar shop) { this.target = shop; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { /*----------执行目标类原方法------------------*/ Object res = method.invoke(this.target, args); /*----------功能增强------------------*/ System.out.println("限时优惠,买车送车模......."); return res; } }
4、使用动态代理调用
@Test public void test01(){ //1.创建目标类对象 BuyCar shop = new AudiShop(); //2.创建handler对象 CarInvocationHandler carInvocationHandler = new CarInvocationHandler(shop); //3.创建代理对象 BuyCar proxy = (BuyCar) Proxy.newProxyInstance( shop.getClass().getClassLoader(), shop.getClass().getInterfaces(), carInvocationHandler); //4.方法调用 proxy.buy();
5、输出结果

浙公网安备 33010602011771号