从java反射到AOP

Java反射

  首先介绍一下反射,根据Class类来获取类的属性,构造函数,方法来实现某些功能。


image.png

提供了一种“俯瞰”和“透视”类和对象内部信息的能力,让你在处理一些全局性的、常规方式不好搞定的需求的时候,有了降维打击的能力。通常都是一些框架处理重复性需求用到反射,业务代码较少用反射。

代理

静态代理

  静态代理是手动写代理类,两种方法:一是基于同一接口,而是直接生成子类。

动态代理

  两种代理方法:一是基于JAVA原生反射原理,二是基于CGLIB生成子类的方法。
Java原生反射

  UserService userService = new UserServiceImpl();
        InvocationHandler invocationHandler = new MyInvovationHandler(userService);
        //动态代理技术
        UserService userServiceProxy = (UserService) Proxy.newProxyInstance(userService.getClass().getClassLoader(), userService.getClass().getInterfaces(), invocationHandler);
        System.out.println(userServiceProxy.getName());
        System.out.println(userServiceProxy.getAge());

CGLIB:

  RealSubject target=new RealSubject();
        //       生成 子类/代理对象
        RealSubject proxy=(RealSubject) Enhancer.create(target.getClass(),new MethodInterceptorImpl());
        proxy.sayHello();

AOP

你可能感兴趣的:(从java反射到AOP)