AOP编程思想及术语 AOP是面向切面的编程,其编程思想是把散布于不同业务但功能相同的代码从业务逻辑中抽取出来,封装成独立的模块,这些独立的模块被称为切面,切面的具体功能方法被称为关注点。在业务逻辑执行过程中,AOP会把分离出来的切面和关注点动态切入到业务流程中,这样做的好处是提高了功能代码的重用性和可维护性。 例如,前面案例的VerifyUser类就是切面,VerifyUser类的beforeAdvice就是关注点。VerifyUser切面的功能就是验证老师身份,可以应用到与老师相关的不同业务流程中。AopEmailNotice是一个业务类,负责发送通知给老师,在发送通知之前需要验证老师的身份。AOP会在AopEmailNotice类的setTeacher方法执行之前,将beforeAdvice关注点切入到AopEmailNotice业务类中,并执行beforeAdvice方法。 Spring框架提供了@AspectJ 注解方法和基于XML架构的方法来实现AOP。前面的案例是基于XML架构的方法,后面一节会讲述基于@AspectJ 注解的方法。下面结合前面的案例讲述一下AOP的相关术语。 ● Aspect 表示切面。切入业务流程的一个独立模块。例如,前面案例的VerifyUser类,一个应用程序可以拥有任意数量的切面。 ● Join point 表示连接点。也就是业务流程在运行过程中需要插入切面的具体位置。例如,前面案例的AopEmailNotice类的setTeacher方法就是一个连接点。 ● Advice 表示通知。是切面的具体实现方法。可分为前置通知(Before)、后置通知(AfterReturning)、异常通知(AfterThrowing)、最终通知(After)和环绕通知(Around)五种。实现方法具体属于哪类通知,是在配置文件和注解中指定的。例如,VerifyUser类的beforeAdvice方法就是前置通知。 ● Pointcut 表示切入点。用于定义通知应该切入到哪些连接点上,不同的通知通常需要切入到不同的连接点上。例如,前面案例配置文件的<aop:pointcut>标签。 ● Target 表示目标对象。被一个或者多个切面所通知的对象。例如,前面案例的AopEmailNotice类。 ● Proxy 表示代理对象。将通知应用到目标对象之后被动态创建的对象。可以简单地理解为,代理对象为目标对象的业务逻辑功能加上被切入的切面所形成的对象。 ● Weaving 表示切入,也称为织入。将切面应用到目标对象从而创建一个新的代理对象的过程。这个过程可以发生在编译期、类装载期及运行期。
|