代理模式 jdk代理 cglib代理 spring aop代理

这里代理原理就不讲了因为基本估计你自己写代码是用不到的,除非你自己要整个框架来替代spring 。主要讲讲有哪些代理模式,以及spring的Aop动态代理规则。先讲结果,Aop的最大意义是:在不改变原来代码的前提下,也不对源代码做任何协议接口要求。而实现了类似插件的方式,来修改源代码,给源代码插入新的执行代码。有了这个,你可以实现自定义注解。实现通用方法打印日志。
代理模式 jdk代理 cglib代理 spring aop代理
哪究竟啥是jdk代理呢,很简单。就是要实现java.lang.reflect.InvocationHandler接口。

代理模式 jdk代理 cglib代理 spring aop代理
代理模式 jdk代理 cglib代理 spring aop代理
代理模式 jdk代理 cglib代理 spring aop代理
上面的例子,代理类可以在原类的方法前后做很多事情。这也是代理模式的实际用处。但是jdk代理模式是有缺陷的。被代理的类必须有接口实现。这个缺陷被cglib弥补了,看下面的例子

代理模式 jdk代理 cglib代理 spring aop代理
但是cglib也是有缺陷的。不能代理final 类 。哪如果被代理的类的方法是final的呢。一样也是不同。区别就是前者抛出异常。后者直接忽略。