AI写作智能体 自主规划任务,支持联网查询和网页读取,多模态高效创作各类分析报告、商业计划、营销方案、教学内容等。 广告
>### JDK动态代理的实现步骤:     第一步:创建接口,JDK动态代理基于接口实现,所以接口必不可少(准备工作)     第二步:实现InvocationHandler接口,重写invoke方法(准备工作)     第三步:调用Proxy的静态方法newProxyInstance方法生成代理实例(生成实例时需要提供类加载器,我们可以使用接口类的加载器即可)     第四步:使用新生成的代理实例调用某个方法实现功能。 ~~~ //JDK提供的动态代理,只能代理接口,不能代理类。cglib能代理类 public class DynamicProxy implements InvocationHandler { // 声明一个对象,这个对象就是用来表示被代理类 private Object obj; // 传入被代理对象。 public Object getProxy(Object obj) { this.obj = obj; // 生成代理对象 return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this); } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // TODO Auto-generated method stub check(); beforeLogging(); Object returnValue = method.invoke(obj, args); afterLogging(); return returnValue; } public void check() { System.out.println("安全检查"); } public void beforeLogging() { System.out.println("事前日志"); } public void afterLogging() { System.out.println("事后日志"); } } ~~~ ~~~ public interface MeiNv { void play(); } public interface Fang { void mai(); } //实现类 public class PanMeiNv implements MeiNv { @Override public void play() { System.out.println("和潘美女玩"); } } public class WuHanFang implements Fang { @Override public void mai() { System.out.println("武汉的房要卖1平1万5,哎"); } } ~~~ ~~~ 测试类 public class MainTest { public static void main(String[] args) { // TODO Auto-generated method stub //创建被代理对象 // PanMeiNv pan=new PanMeiNv(); // //创建代理类 // DynamicProxy dp=new DynamicProxy(); // //通过getProxy方法拿到代理对象 // Object proxy=dp.getProxy(pan); // //把代理对象强转为美女类型 // MeiNv mv=(MeiNv) proxy; // mv.play(); //流程痕迹 //创建被代理对象 WuHanFang whf=new WuHanFang(); //创建代理类 DynamicProxy dp=new DynamicProxy(); Object proxy = dp.getProxy(whf); Fang f=(Fang) proxy; f.mai(); } } ~~~