java学习之路---设计模式---动态代理

本文介绍了动态代理的基本原理及其与静态代理的区别,并通过一个具体的Java示例演示了如何使用动态代理来实现接口的方法调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

动态代理的原理和静态代理参不多,不同在于静态实现的是一个借口,而动态实现的是你想要实现的接口(也就是可以实现所有接口)    

静态代理地址,可以看看,再来看动态代理:http://blog.youkuaiyun.com/javastudyr/article/details/16811995

            package  fstest;

import  java.lang.reflect.InvocationHandler;
import  java.lang.reflect.Method;
import  java.lang.reflect.Proxy;

public  class  MyInvocationHander  implements  InvocationHandler{
//如果要完成动态代理,就要实现InvocationHandler接口
     
      private  Object  obj ;  //真实主题
      public  Object bind(Object obj){  //绑定真实主题
          
            this . obj  =obj;
          
            return  Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(),  this  ); //取得代理对对象
          
     }
     
      public  Object invoke(Object proxy, Method method, Object[] args)
                throws  Throwable { //动态调用方法
     
          Object temp=method.invoke(  this . obj  , args); //调用方法,传入真实主题和参数
            return  temp;
     }

}


public  interface  Subject {
      public  String say(String name,  int  age);

}

public  class  RealSubject  implements  Subject{

      public  String say(String name,  int  age) {
          
            return  "名字"  +name+ "年龄"  +age;
     }

}

package  fstest;

public  class  DynaProxyDemo {
      public  static  void  main(String[] args) {
          MyInvocationHander hander=  new  MyInvocationHander(); //实例化代理类
          
           RealSubject real= new  RealSubject ();
          
          Subject sub=(Subject)hander.bind(real);  //绑定对象
          
          String str=sub.say(  "like" , 30);
          
          System.  out .println(str);
          
          
     }

}

结果:
名字like年龄30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值