代理模式是指当目标对象由于某些原因不方便或不允许直接为客户端提供服务时,创建一个代理对象代替目标对象处理业务。比如客户通过房产中介购房、租房;消费者预订火车票、机票等。通过订票app。
为了彻底理解代理模型,我们需要澄清以下概念:
设计:即解决某一类问题的固定思路,是前人通过大量实践总结出来的。软件开发等行业各类工作的根本目的是解决现实中提出或遇到的问题。
客户端:服务消费者
目标:真正的服务提供商(不直接与客户打交道)
代理:面向客户的服务提供者(实际上是调用目标对象来提供真正的服务)
服务接口:目标对象和代理对象都需要实现这个接口。
在实际的java软件开发中,代理模式有两种实现方式,一种是静态代理模式,一种是动态代理模式,后者是通过JAVA原生反射机制和基于cglib的字节码的硬编码来实现的。
静态代理模式:即实现服务的代理类需要在运行前手工编写。特点是一个代理类只能代理一个业务实现类。
动态代理模式:
Jdk代理模式:通过创建InvocationHandler的实现来编写具体的业务代码。这个类有一个方法,它的参数是代理业务接口的方法和参数。可以通过调用method.invoke来调用目标对象的业务实现注意:这里的目标对象可以是任何业务实现类对象,所以这种代理方法可以代理多个业务实现类,比静态代理更灵活。然后通过Proxy.newInstance动态创建特定接口的代理对象,为客户端提供服务。
Cglib代理模式:
spring框架中的用例: