Java反射
首先介绍一下反射,根据Class类来获取类的属性,构造函数,方法来实现某些功能。
提供了一种“俯瞰”和“透视”类和对象内部信息的能力,让你在处理一些全局性的、常规方式不好搞定的需求的时候,有了降维打击的能力。通常都是一些框架处理重复性需求用到反射,业务代码较少用反射。
代理
静态代理
静态代理是手动写代理类,两种方法:一是基于同一接口,而是直接生成子类。
动态代理
两种代理方法:一是基于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();