JavaSE-动态代理

1.1 动态代理

  • 动态代理的角色和静态代理的一样, 动态代理的代理类是动态生成的 . 静态代理的代理类是提前写好的。
  • 动态代理分为两类 : 一类是基于接口动态代理 , 一类是基于类的动态代理。
    • 基于接口的动态代理----JDK动态代理。
    • 基于类的动态代理–cglib。
    • 现在用的比较多的是 javasist 来生成动态代理 . 百度一下javasist。

JDK的动态代理需要了解两个类 : InvocationHandler 和 Proxy

InvocationHandler【调用处理程序】

Object invoke(Object proxy, 方法 method, Object[] args)//参数
//proxy - 调用该方法的代理实例
//method -所述方法对应于调用代理实例上的接口方法的实例。 方法对象的声明类将是该方法声明的接
口,它可以是代理类继承该方法的代理接口的超级接口。
//args -包含的方法调用传递代理实例的参数值的对象的阵列,或null如果接口方法没有参数。 原始
类型的参数包含在适当的原始包装器类的实例中,例如java.lang.Integer或java.lang.Boolean
。

Pxoxy【代理】

//生成代理类
public Object getProxy(){
   
  return Proxy.newProxyInstance(this.getClass().getClassLoader(),
                 rent.getClass().getInterfaces(),this);
}

1.2 代码示例

Rent接口(抽象角色)

package cn.guardwhy.domain;
// 抽象角色:租房
public interface Rent {
   
    public void rent();
}

Landlord

package cn.guardwhy.domain;
// 真实角色: 房东,要出租房子
public class Landlord implements Rent {
   
    @Override
    public void rent() {
   
        System.out.println("房屋出租!!!");
    }
}

ProxyInvocationHandler 即代理角色

package cn.guardwhy.proxy;

import cn.guardwhy.domain.Rent;

import java.lang.reflect.In
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值