AOP的概念
面向切面的编程,切面用于描述分散在对象、类或者函数中的横向关注点,通过分离这些关注点,把解决特定领域问题的代码从业务逻辑中独立出来,他们之间的关系通过切面来维护。效果是保证程序员在不修改源代码的情况下,为系统中业务组件的多个业务方法添加某种通用功能。
组成:
- 切面:要实现的功能,是系统模块化的一个切面或领域。如调用时间。
- 通知:切面的实际实现,他通知系统新的行为。通知在连接点插入到系统中。
-
连接点:应用程序执行过程中插入切面的地点。连接点如下
- 切入点:定义了通知应该应用在哪些连接点上,通知可以应用在aop框架支持的任何连接点。可以这样理解,切入点就是当通知插入到某个连接点时,这个连接点就成了切入点。
- 引入:为类添加新方法和属性
- 目标对象:被通知的对象,既可以是被通知的类,也可以是第三方类。
- 代理:将通知应用到目标对象之后创建的对象,应用系统的其他部分不用为了支持代理对象而改变。
- 织入:将切面应用到目标对象从而创建的一个新的对象的过程,织入发生在目标对象生命周期的多个点上。
AOP实现原理
分为静态实现和动态实现,动态实现要比动态实现效率高,因为一个动态代理能代理多个实现了指定接口的对象(目标对象),而静态代理,需要为每一个目标对象都写一个代理类,重复代码。
1.静态实现,在编译阶段对程序进行修改,生成代理类,AspectJ
2.动态实现,运行阶段动态生成,在Spring AOP中有两种代理方式,JDK动态代理和CGLIB代理。默认情况下,目标对象实现了接口时,则采用JDK动态代理其接口,反之,采用CGLIB代理。
JDK动态代理示例
AOP的使用示例
示例
execution用来匹配方法
参考链接
其他切入点表达式http://blog.csdn.net/wangpeng047/article/details/8556800