Spring AOP与动态代理
AOP(Aspect Orient Programming),也就是面向方面编程,作为面向对象编程的一种补充,相对于面向对象的编程,它更注重于对象层次结构方面的东西。 与传统的OOP纵向编程思想相比,AOP更强调横向编程,AOP的出现恰恰就是对OOP出了完美的补充。在事务管理、安全检查、缓存、对象池管理等,AOP已经成为一种非常常用的解决方案。
利用动态代理实现AOP
在使用Spring实现AOP之前,先看一下静态代理,已经Java的动态代理。
(一) 静态代理:
包图
利用,代理接口(Subject)、代理类(ProxySubject)、委托类(RealSubject),现实对RealSubject的访问控制,由于静态代理比较简单,代码略。
静态代理对象的一个接口只服务于一种类型的对象,如果要代理的方法很多,势必要为每一种方法都进行代理,静态代理在程序规模稍大时就无法胜任了。动态代理类的源码是在程序运行期间由JVM根据反射等机制动态的生成。
(二) 动态代理
接口类:
普通类:
<aop:config> <aop:aspect id="myAop" ref="check"> <aop:pointcut id="target" expression="execution(* com.spring.aop.Common.execute(..))"/> <aop:before method="checkValidity" pointcut-ref="target"/> <aop:after method="addLog" pointcut-ref="target"/> </aop:aspect> </aop:config>