AOP全称 Aspect-Oriented Programming 即面向切面编程。怎么样,是否是感受很熟悉?对,相似的还有面向过程编程(Procedure-Oriented Programming),面向对象编程(Object-Oriented Programming)。若是对后面两种编程方式有必定的了解,那么对于AOP想必也就比较容易理解了。html
就像面向对象编程,关注点在于对象,即类。而面向切面编程理所固然关注于切面,那么什么是切面?能够理解为程序执行时的某个节点,或更具体一点,在某个方法执行以前,执行以后,返回以后等其它节点。java
AspectJ是一个基于Java语言的AOP框架,它采用编译时加强,会将加强目标编译获得一个新的AOP代理类。正则表达式
Spring提供的AOP框架,使用了和AspectJ同样的注解,可是经过动态生成代理类的方式生成AOP代理类。spring
Spring AOP中AOP代理的一种实现,使用原生JDK反射和动态代理生成AOP代理,须要代理类与目标实现相同的接口。编程
Spring AOP中AOP代理的另外一种实现,使用CGLib动态生成AOP代理类,须要代理类为目标类的子类。框架
一个切面,能够理解为一个切面模块,将相关的加强内容写进同一个切面。例如:一个负责日志的切面。代理
表明能够由AOP加强织入的程序执行节点。日志
所要作的加强处理htm
切入点,定义了将被Advice加强的一个或多个Join Point,可使用正则表达式或模式匹配。对象
被加强的目标对象
方法执行以前
方法执行以后
方法成功执行完成以后
方法抛出异常以后
环绕方法执行的整个周期