切入点注释与最终字符串

Pointcut annotation vs Final String

所以我正在研究 Spring AOP 教程,当解释切入点注释的概念时,我想 "why not use final private String?"。我查了一下,但没有找到任何可以解释为什么使用切入点开销的内容?

有切入点:

@Before("pointcutMethod()")
public void loggingAdvice(){
    System.out.println("loggin advice");
}

@Before("pointcutMethod()")
public void loggingAdviceTwo(){
    System.out.println("loggin advice2");
}

@Before("pointcutMethod() || secondPointcutMethod()")
public void loggingAdviceTree(){
    System.out.println("loggin advice3");
}

@Pointcut("execution(public * get*())")
public void pointcutMethod(){}

 @Pointcut("within(shapes.Circle)")
public void secondPointcutMethod(){}

并使用私有最终字符串:

private static final String EXECUTION_PUBLIC_GET = "execution(public * get*())";
private static final String WITHIN_SHAPES_CIRCLE = "within(shapes.Circle)";
private static final String OR = " || ";

@Before(EXECUTION_PUBLIC_GET)
public void loggingAdvice(){
    System.out.println("loggin advice");
}


@Before(EXECUTION_PUBLIC_GET)
public void loggingAdviceTwo(){
    System.out.println("loggin advice2");
}

@Before(EXECUTION_PUBLIC_GET + OR + WITHIN_SHAPES_CIRCLE)
public void loggingAdviceTree(){
    System.out.println("loggin advice3");

编辑:我被指出存在基于 xml 的 AOP 配置,所以我编辑了问题以仅解决切入点的注释。

切入点的使用在建议和实际连接点之间增加了一个 abstraction/redirection 级别,提高了可扩展性和关注点分离:

  • 在重构程序的情况下,只需要调整切入点,而不是每个建议。
  • 切入点和建议可以单独定义(例如,库的维护者可以向库的实际用户提供一些切入点)。
  • 切入点的组合(组合)可以使事情变得清晰(在您的示例中,您可以定义一个 @Pointcut("pointcutMethod() || secondPointcutMethod()") )。

更多详细信息和示例可以直接在 spring 文档中找到: http://docs.spring.io/spring/docs/current/spring-framework-reference/html/aop.html#aop-pointcuts

但正如 Boris Pavlović 所说,这是一种风格问题,您应该使用对您来说最方便的方式。