戴着假发的程序员出品 抖音ID:戴着假发的程序员 欢迎关注
@Pointcut的配置
spring应用手册(第三部分)
Pointcut表示切入点,我们在Hellowrold中使用的是内联式的切入点配置:
@Before("execution(* com.st.dk.demo7.service.BookService.saveBook(..))")
这种配置方式的缺点很明显,就是这个切入点是无法重复使用的,只能在当前的@Befor中使用。
其实我们可以申明一个切入点,方便重复使用。例如下面的程序:
/**
* @author 戴着假发的程序员
*
* @description
*/
@Component //将当前bean交给spring管理
@Aspect //定义为一个AspectBean
public class DkAspect {
@Pointcut("execution(* com.st.dk.demo7.service.BookService.saveBook(..))")
private void pointCut1(){}
//定义一个前置通知
@Before("pointCut1()")
private static void befor(){
System.out.println("---前置通知---");
}
//定义一个后置通知
@AfterReturning("pointCut1()")
public void afterReturning(){
System.out.println("---后置通知---");
}
}
上面的程序中我们使用@Pointcut修饰了方法poinCut1() ,@Pointcut中定义了切入点的位置。而pointCut1方法本身没有任何语句。这个方法的存在主要是方便后面对应这个切入点的引用。
我们在befor和afterReturning方法中通过 方法名 pointCut1()引用了上面的切入点。 这样我们的切入点就可以重复使用了。(关于后置通知和切入点的配置表达式请参考对应的章节)
测试:
@Test
public void testAopPointCut(){
ApplicationContext ac =
new AnnotationConfigApplicationContext(Appconfig.class);
IBookService bean = ac.getBean(IBookService.class);
bean.saveBook("论一个假发程序员的修养");
}
结果: