连接点Joinpoint
程序执行的某个特定位置,如类开始初始化前、类初始化后、类某个方法调用前、某个方法调用后、方法抛出异常后。一个类或一段程序代码拥有一些具有边界性质的特定点,这些特定点成为连接点,Spring仅支持方法的连接点,即仅能在方法调用前,方法调用后,方法抛出异常时以及方法调用前后这些程序执行点织入增强。
切点Pointcut
每个程序类都有多个连接点,如一个拥有两个方法的类,这两个方法都是连接点,即连接点是程序类中客观存在的事务。但是这为数总舵的连接点中,如何定位到某个感兴趣的连接点上呢?AOP通过“切点”定位特定连接点。通过数据库查询的概念来理解切点和连接点的关系:连接点相当于数据库中的记录,而切点相当于查询条件。切点和连接点不是一对一的关系,一个切点可以匹配多个连接点。
在spring中切点通过org.springframework.aop.Pointcut接口进行描述,它使用类和方法作为连接点的查询条件,Spring AOP的规则解析引擎负责解析切点所设定的查询条件,找到对应的连接点。其实确切的说,不能称之为查询连接点,因为连接点是方法执行前、执行后等包括方位信息的具体程序执行点,而切点只是定位到某个方法上,所以如果需要定位到具体连接点上,还需要提供方位信息
增强 Advice
增强是织入到目标列连接点上的一段程序代码。在Spring中增强除了用于描述一段程序代码外,还拥有另外一个和连接点相关的信息,这便是执行点的方位。结合执行点方位信息和切点信息,我们就可以找到特定的连接点了,因为增强中既包含了用于添加到目录连接点上的一段执行逻辑,有包含了用于定位连接点的方位信息,所以Spring所提供的增强接口都是带方位名的:BeforeAdvice、AfterReturningAdvice、ThrowsAdvice等,BeforeAdvice表示方法调用前的位置,AfterReturningAdvice表示访问返回前的位置。所以只有结合切点和增强两者一起才能确定连接点并实施增强逻辑