Spring AOP:
通过将业务逻辑从应用服务(如监控和事务管理)中分离出来。
切面:一个关注点的模块化,这个关注点可能横切多个对象。比如事务管理、权限管理、日志管理都是横切关注点。
切入点:应用切面功能的位置,也就是该调用切面类的那个方面。
通知:在切面的某个特定的切入点上执行的动作。<aop-before>切入点之前调用,<aop-after>切入点之后调用。
Spring AOP用到的设计模式:
装饰器模式:动态地给一个对象添加一些额外的职责。就增加功能来说, 装饰器模式相比生成子类更为灵活。
代理模式:为其他对象提供一种代理以控制对这个对象的访问。
通知(Advice):切面的功能被称为“通知”,通知定义了切面是什么,何时使用。如它应该引用在某个方法被调用之前、之后、之前和之后、或是只在方法抛出一个异常时?
连接点(Joinpoint):连接点是在程序执行过程中能够插入切面的一个点。这个点可以是方法被调用时、异常抛出时、甚至字段被编辑时。切面的代码可以通过这些点插入到程序的一般流程之中,从而添加新的行为。
切入点(Pointcut):一个切面不是一定要通知程序里全部连接点。切入点可以缩小切面通知的连接点的范围。切入点定义了切面的“何地”使用。切入点的定义匹配要织入的一个或多个连接点。我们通常使用明确的类和方法名称,或是,利用正则表达式定义匹配的类和方法名称模板来指定这些切入点。有些AOP框架允许创建动态切入点,可以根据运行时的状态(比如方法的参数值)来应用切面。
切面(Aspect):切面是通知和切入点的结合。通知和切入点共同定义了关于切面的全部内容--他的功能,在何时和何地完成这个功能。
引入(Introduction):“引入”允许我们向现有的类添加新的方法和属性。(这个定义我还是不太明白)
目标(Target):“目标”是被通知的对象。它可以是我们编写的任何一个对象或是第三方对象。如果不使用AOP,那么这个对象就只能自己处理主要的业务逻辑(保存数据)和交叉事务的逻辑(日志记录)。使用了AOP,那么这两个业务逻辑就可以分开了。目标对象只负责出路主要的业务逻辑(保存数据)。交叉事务的逻辑(日志记录)交给“通知”来处理。
代理(Proxy):“代理”是向“目标对象”应用“通知”之后被创建的对象。对于我们来说目标对象(在应用AOP之前的对象)和代理对象(在应用AOP之后的对象)是一样的。
织入(Weaving):“织入”是把切面应用到目标对象来创建新的代理对象的过程。切面在指定的连接点(切入点)织入到目标对象。在目标对象的生命周期中有至少三个时机可以发生织入过程:编译时、类加载时、运行时。