动态代理使用方法
无论是jdk的还是cglib的,基本使用方法都一样.即Proxy代理类提供基础的几个方法.
1.getInvocationHandler
传入参数:代理对象.(也就是newProxyInstance方法返回的对象.)
用于获取代理的处理实现.当通过代理类执行某一方法调用的时候,会调用这个Handler的invoke方法.
2.getProxyClass
传入类加载器,需要代理的接口.返回代理类.这里的代理类cglib是动态生成,jdk是jvm反射.
用于创建代理类,通常我们由接口 -> 实现类 ,这个方法就是放回借口的实现类,只不过该实现类是不具备实现功能需求的空实现类.
3.newProxyInstance
传入类加载器,需要代理的接口,代理接口的方法处理器.返回代理实例,这个实例可以通过强制转换为任意接口的实现bean.
该方法是用的最多的方法,该方法的逻辑是先动态创建接口的实现类,该实现类的实现方法,然后设置方法处理器Invaocation,所有的方法调用,都会转发到Invaocation 的invoke去处理.我们只需要实现invoke方法即可.
4.isProxyClass
判断一个类是否是代理类.如果是代理类,
然后实现InvaocationHandler 接口,通过Proxy.newProxyInstance 生成的实例,在执行调用方法的时候,都会调用该实现类的invoke方法.
eg: