java动态代理
- 代理是一种常用的设计模式,其目的就是为真实对象提供一个代理对象以控制对真实对象的访问,或在真实对象原有的功能上,增加额外的功能。代理类负责为委托类(被代理类、真实类)预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理。按照代理的创建时期,代理类可分为两种:动态代理和静态代理。
- 动态代理是指利用Java的反射技术在运行时生成代理类对象。
proxy类和InvocationHandler接口是动态代理的两个核心机制,其通过相互配合来实现动态代理:Proxy类就是用来创建一个代理对象的类,它提供了很多方法,但最常用的是newProxyInstance方法。InvocationHandler接口是proxy代理实例的调用处理程序实现的一个接口,每一个proxy代理实例都有一个关联的调用处理程序;在代理实例调用方法时,方法调用被分派到调用处理程序的invoke方法。其相当于一种代码增强,即在原先的方法逻辑上加上额外操作,在方法执行之前和之后加点通用逻辑,方便实现和维护。