动态代理,反射,注解的复习笔记

1.动态代理的作用

动态代理最主要的用途就是在各种框架中,很方便的在运行期间生成代理类,通过代理类就可以完成AOP、过滤器、拦截器等操作

(注:代理就是被代理者没有能力或者不愿意去完成某件事情,需要找个人代替自己去完成这件事,动态代理就是用来对业务功能(方法)进行代理的。比如UserService类有1000个业务方法,每个业务方法都都需要记录执行时间,那么不可能写1000次相同代码吧,因此可以让代理对象帮忙完成时间记录)
动态代理,反射,注解的复习笔记_第1张图片
首先使用动态代理必须基于接口,动态代理的静态创建方法:

public static Object newProxyInstance(
                                    ClassLoader loader,/*对象.getClass().getClassLoader() ,目标对象通过getClass方法获取类的所有信息后,调用getClassLoader()方法来获取类加载器
获取类加载器后,可以通过这个类型的加载器,在程序运行时,将生成的代理类加载到JVM即Java虚拟机中,以便运行时需要*/
                                   Class<?>[] interfaces,/*对象.getClass().getInterfaces() 
获取被代理类的所有接口信息,以便于生成的代理类可以具有代理类接口中的所有方法*/
                                     InvocationHandler handle /*用于集中处理在动态代理类对象上的方法调用,通常在该方法中实现对委托类方法的处理以及访问*/   
                                     ) 

java.lang.reflect.InvocationHandler是代理对象的实际处理代理逻辑的接口,具体代理逻辑在其 invoke 方法中实现

public Object invoke(Object proxy, Method method, Object[] args)
**解释说明:
- 返回值:方法被代理后执行的结果
- 参数列表说明:
  Object proxy   :  就是代理对象(通常不使用)
  Method method  :  代理对象调用的方法
  Object[] args  :  被代理方法中的参数 (因为参数个数不定,所以用一个对象数组来表示)
                     如果方法不使用参数,则为 null
    
//所有代理对象调用的方法,执行是都会经过invoke
//因此如果要对某个方法进行代理增强,就可以在这个invoke方法中进行定义    

例子:

/*其中Star是代理类接口,具有Song和Dance方法;*/
public class ProxyUtil {
   
    public static Star createProxy(BigStar bigStar){
   
        Star starProxy = (Star

你可能感兴趣的:(JAVA,笔记,动态代理,反射技术,注解)