静态代理与JDK动态代理

本文详细介绍了Java中的代理模式,包括静态代理和JDK动态代理。静态代理通过创建一个实现相同接口的代理类,实现对原对象的方法增强。而JDK动态代理则在运行时动态生成代理类,无需预先编写代理类,可以代理同一接口下的多个类,更加灵活。动态代理的关键在于实现InvocationHandler接口并重写invoke方法。
摘要由CSDN通过智能技术生成

静态代理与JDK动态代理

什么是代理?
	代理通俗的讲就是一个对象完成一件事,你通过代替这个对象完成这件事,并且可以在完成这件事的基础上增加你的业务.
		例如:一个商人一元/只出售铅笔,你在铅笔上画上图案二元/一只出售,这个就叫代理.
静态代理:
	在JAVA中体现为:一个接口中有n个方法,一个类实现了这个接口,重写了接口中的方法.但是现在你希望在这个方法中加入自己的一些业务,你需要通过创建一个类(代理类)来实现这个接口或者继承被代理类,然后重写接口或者被代理类的方法(方法内的代码块:被代理类中方法的代码块+自己业务的代码块)-----通过代理类创建接口对象,对象调用重写后的方法来实现静态代理.
	通俗的讲就是创建一个实现接口或者继承被代理类的类,在类中重写方法,然后创建接口对象,调用方法,实现静态代理.
JDK动态代理:
	创建(在创建前需要有一个接口以及实现接口方法的类(被代理类)):
        1.创建一个类实现InvocationHandler接口
            public class 类名 implements InvocationHandler{}
        2.私有一个object类型的对象,在其构造函数中传入的参数就是该对象(该对象用于储存被代理的实例)
            private Object 对象名 ;
            public 类名(Object 对象名){
                this.对象名 = 对象名 ;
            }
        3.invoke方法(当我们通过动态代理对象调用接口中的方法时会默认调用此方法)
             public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                 你的业务1;
                 Object obj = method.invoke(对象名, args);
                 你的业务2;
                 return obj;
             }
    使用:
        4.在主函数中的操作:
            4.1:创建接口对象
                接口名(或类名) 对象名1 = new 类名(被代理类);
            4.2:创建代理类的实例
                实现InvocationHandler接口的类 对象名2 = new 实现InvocationHandler接口的类(对象名1);
            4.3:获取代理对象
                接口名 代理对象名 = (接口名) Proxy.newProxyInstance(
                    对象名1.getClass().getClassLoader(),
                    对象名1.getClass().getInterfaces(),
                    对象名2);
            4.4:调用方法
                代理对象名.接口中的方法名1;
                ...
                代理对象名.接口中的方法名n;
总结:
	静态代理:
		1.静态代理事先知道要代理的是什么
		2.只能代理一个类(当被代理类较多时,需要创建大量的代理类,不太实用)
	JDK动态代理:
		1.在运行前动态代理不知道要代理的类是什么,只有在运行时才知道
		2.无需编写他的代理类(通过反射机制动态创建代理类)
		3.可以代理同一接口下的多个类
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值