代理
- 代理(Proxy)是一种设计模式,可以在目标对象实现的基础上,扩展目标对象的功能。
- 代理对象是对目标对象的扩展,并会调用目标对象。
三种代理模式
- 静态代理 100%
代理对象与目标对象要实现相同的接口,然后通过调用相同的方法来调用目标对象的方法。
优点:不用修改原对象。
缺点:一旦接口增加方法,目标对象和代理对象都要维护。 - 动态代理(也叫JDK代理,接口代理) 30%
动态代理中,代理对象不需要实现接口,代理对象的生成是利用JDK的API,动态地在内存中构建代理对象。
使用java.lang.reflect.Proxy包中的newProxyInstance方法:
static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces,InvocationHandler h )
要求:要求目标对象必须实现了接口。
- Cglib代理(子类代理) 10%
Spring AOP使用。Spring的切面由包裹了目标对象的代理类实现。代理类处理方法的调用,执行额外的切面逻辑,并调用目标方法。