突然想到AOP,就简单回忆一下动态代理。
1.什么是动态代理?
假如有个用户有增删该查4个方法,如果要对用户操作后进行日志记录,可能会有人说直接在增删改查后做日志记录就行。
一旦我想在用户操作之前加一个权限验证方法,那每个调用方法之前得再加一个权限验证方法,这样的工作量则是巨大的。
解决方案:将对象增删改查方法交给代理去执行,代理在执行方法前后可以做日志和权限控制。
代理:本来应该由自己做的事情,由别人去做
动态代理:在程序运行过程中生成代理对象,由该代理对象去完成自己要去做的事情。
应用:
1.事务管理,执行某个方法前开启事务,执行后关闭。
2.日志
3.权限
4.方法执行效率
spring 的动态代理就是AOP的实现原理,因此理解动态代理非常重要。如下记录一种简单的动态代理demo
详情请参考:https://www.cnblogs.com/techyc/p/3455950.html
public class LogHandler implements InvocationHandler {
private Object target;
public Object createProxy(Object targetObject){
this.target = targetObject;
return Proxy.newProxyInstance(
targetObject.getClass().getClassLoader(),
targetObject.getClass().getInterfaces(), this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
return method.invoke(target, args);
}
}