切入点注释与最终字符串
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ć 所说,这是一种风格问题,您应该使用对您来说最方便的方式。
所以我正在研究 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ć 所说,这是一种风格问题,您应该使用对您来说最方便的方式。