【发布时间】:2017-05-08 09:25:41
【问题描述】:
我正在学习 Spring 中的 AOP 概念。我现在非常了解 @Before 和 @After 注释的用法,并开始将其用于时间捕获目的。
这几乎满足了我所有与 AOP 相关的需求。想知道每个春季指南都谈到的@pointcut 注释是什么吗?那是多余的功能吗?还是有单独的需求?
【问题讨论】:
标签: spring spring-mvc spring-aop
我正在学习 Spring 中的 AOP 概念。我现在非常了解 @Before 和 @After 注释的用法,并开始将其用于时间捕获目的。
这几乎满足了我所有与 AOP 相关的需求。想知道每个春季指南都谈到的@pointcut 注释是什么吗?那是多余的功能吗?还是有单独的需求?
【问题讨论】:
标签: spring spring-mvc spring-aop
简单来说,你在@Before 或@After 中指定的任何内容都是一个切入点表达式。可以使用 @Pointcut 注释将其提取到单独的方法中,以便更好地理解、模块化和更好地控制。例如
@Pointcut("@annotation(org.springframework.web.bind.annotation.RequestMapping)")
public void requestMapping() {}
@Pointcut("within(blah.blah.controller.*) || within(blah.blah.aspect.*)")
public void myController() {}
@Around("requestMapping() && myController()")
public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable {
...............
}
如您所见,您可以使用@Pointcut 将其分成两个方法,而不是在@Around 中指定切入点表达式。
【讨论】:
Pointcut 表达式用于方法,并且我需要在Before、After&Around 等任何注释中使用这些方法。我说的对吗?
ProceedingJoinPoint joinPoint 的用途吗?如何通过?
joinPoint.proceed() 才能将调用转发给该函数。