切点和连接点的区别
在学习Spring的时候,我就很迷惑,什么是切入点,什么是连接点,它们之间有什么区别。今天刚好遇到了这个问题,经过仔细思考和查阅资料,我得到了以下的结论,下面让我用更简单的方法把它描述出来。
/** * * execution(* com.sample.service.impl..*.*(..)) 解释如下: 符号 含义 execution() 表达式的主体; 第一个”*“符号 表示返回值的类型任意; com.sample.service.impl AOP所切的服务的包名,即,我们的业务部分 包名后面的”..“ 表示当前包及子包 第二个”*“ 表示类名,*即所有类。此处可以自定义,下文有举例 .*(..) 表示任何方法名,括号表示参数,两个点表示任何参数类型 execution(<修饰符模式>?<返回类型模式><方法名模式>(<参数模式>)<异常模式>?) 除了返回类型模式、方法名模式和参数模式外,其它项都是可选的。 * * * * @param joinPoint */ @AfterReturning("execution(* com.zxl.examples.service..*.*(..))") public void logServiceAccessAfterReturning(JoinPoint joinPoint) { System.out.println("Completed: " + joinPoint); }
就好比上面这个例子,@AfterReturning("execution(* com.zxl.examples.service..*.*(..))") 是一个切点,而这个切点会选择所有符合筛选条件的点切入,说好听点就是看看某个包下面的函数符合不符合条件,符合条件的话,那么就在该函数AfterReturning后执行logServiceAccessAfterReturning函数,那么我们所谓的该函数,或者说这些函数就称之为连接点。注意啊:execution(* com.zxl.examples.service..*.*(..))是筛选条件,所以符合条件的点可能有一个,或者多个,那么我们称这些点为连接点。

浙公网安备 33010602011771号