java动态代理总结


具体实现步骤:

第一步,创建接口和实现类,也可以称为目标类!

接口------

public interface targetImp {

 public void dosome();
}

目标类-------------

public class target implements targetImp{

 @Override
 public void dosome() {
  // TODO Auto-generated method stub
  System.out.println("----doSomething");
 }
}

第二步,创建InvocationHandler的实现类,和拦截器类

------------------------拦截器类,作用是在执行目标方法之前或者之后根据需求执行相应操作

public class interceptor {

 public void befor(){
  System.out.println("---------befor");
 }
 public void after(){
  System.out.println("---------after");
 }
}
----------------------------创建InvocationHandler实现类

public class MyHandler implements InvocationHandler {

 private Object o;//被代理的对象
 private interceptor i;
 public MyHandler(){
  
 }
 public MyHandler(Object o){//在实例化的时候将目标类引用进来 并且实例化拦截器
  this.o=o;
  i=new interceptor();
 }
 @Override
 public Object invoke(Object proxy, Method method, Object[] args)//Object proxy:指被代理的对象。 Method method:要调用的方法 
   throws Throwable {                                                                       //Object[] args:方法调用时所需要的参数 
  Object res=null;
  i.befor();
  res=method.invoke(o, args);//实现目标类的方法
  i.after();
  return res;
 }
}

 

第三步,创建代理类

public class MyProxy {

 public Object getProxy(Object o){
  MyHandler h=new MyHandler(o);
  return Proxy.newProxyInstance(o.getClass().getClassLoader(),o.getClass().getInterfaces(),h);
 }
}

第四步,测试

public class test {

 public static void main(String[] args) {
  targetImp t=new target();
  MyProxy my=new MyProxy();
  targetImp res=(targetImp)my.getProxy(t);
  res.dosome();
 }
}

第五步 测试结果

---------befor
----doSomething
---------after

 

总结:动态代理的底层是java的反射机制,在框架的使用上面比较多,目标类和接口都是通过后期的配置文件去指定的,所以我们只要指定了类名和接口,通过动态代理的方式去执行方法



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值