Java Spring AOP建议使用方法而不是@annotation:为什么?
我对春天的建议一点也不了解。有两种方法可用于创建具有两个建议的方面:Java Spring AOP建议使用方法而不是@annotation:为什么?,java,spring,spring-aop,aspect,Java,Spring,Spring Aop,Aspect,我对春天的建议一点也不了解。有两种方法可用于创建具有两个建议的方面: 我们可以创建一个带有切入点注释的空方法。然后,我们只需使用包含空方法名称的通知创建方法: 我们可以使用@Before(“@annotation(Loggable)”)直接创建这两个方法,而无需使用空方法及其名称。它似乎实现了相同的操作(它也在控制台中显示文本数据): 请你解释一下什么时候必须进行第二次手术?人们说它允许某些东西,但我不明白它是什么。首先,你需要了解切入点和建议的基本内容 其次,这些基于注释的配置只是配置
- 我们可以创建一个带有切入点注释的空方法。然后,我们只需使用包含空方法名称的通知创建方法:
- 我们可以使用@Before(“@annotation(Loggable)”)直接创建这两个方法,而无需使用空方法及其名称。它似乎实现了相同的操作(它也在控制台中显示文本数据):
请你解释一下什么时候必须进行第二次手术?人们说它允许某些东西,但我不明白它是什么。首先,你需要了解切入点和建议的基本内容 其次,这些基于注释的配置只是配置方面的一种方式。因此,不要将其视为“带有切入点注释的空方法”,而是将其视为使用注释定义切入点的语法 回到你的问题上来 他们都只是简单地定义了一些建议。在第二种方式中,您将切入点定义直接放入建议定义中,而在第一种方式中,您为切入点命名,并在建议中引用它 只要你知道自己在做什么,就没有对错。例如,对于非常简单和直接的切入点,它只在一个或两个建议中使用,您可以将其直接放在建议中,就像在第二种方式中一样
然而,通常给切入点起一个有意义的名字并在建议中引用它是有意义的。它赋予你的切入点以独特的意义,并使它在将来更容易修改。首先你需要了解切入点和建议的基本内容 其次,这些基于注释的配置只是配置方面的一种方式。因此,不要将其视为“带有切入点注释的空方法”,而是将其视为使用注释定义切入点的语法 回到你的问题上来 他们都只是简单地定义了一些建议。在第二种方式中,您将切入点定义直接放入建议定义中,而在第一种方式中,您为切入点命名,并在建议中引用它 只要你知道自己在做什么,就没有对错。例如,对于非常简单和直接的切入点,它只在一个或两个建议中使用,您可以将其直接放在建议中,就像在第二种方式中一样
然而,通常给切入点起一个有意义的名字并在建议中引用它是有意义的。它赋予您的切入点以独特的意义,并使其在将来更易于修改。可以阅读Spring AOP的基本概念 建议:方面在特定连接点采取的操作 切入点:匹配连接点的谓词 使用带注释的方法
@PointCut
,将声明一个与连接点匹配的切入点表达式
然后可以使用此方法名称将切入点表达式与
当切入点表达式直接使用通知编写时,它被称为就地切入点表达式
据我所知,使用就地切入点表达式时没有区别。同时,使用@PointCut
注释方法的优点是,我们可以使用几种不同的方法来获得更具可读性的建议
希望这有助于阅读Spring AOP的基本概念 建议:方面在特定连接点采取的操作 切入点:匹配连接点的谓词 使用带注释的方法
@PointCut
,将声明一个与连接点匹配的切入点表达式
然后可以使用此方法名称将切入点表达式与
当切入点表达式直接使用通知编写时,它被称为就地切入点表达式
据我所知,使用就地切入点表达式时没有区别。同时,使用@PointCut
注释方法的优点是,我们可以使用几种不同的方法来获得更具可读性的建议
希望这对“人们说”有所帮助,请提供“人们”说的参考或引用。在任何情况下,一个原因是您不能总是放置注释(例如第三方代码,如库),因此方法切入点是另一种选择?(Votre besoin)“人说”,请提供“人”说的参考或引用。在任何情况下,一个原因是您不能总是放置注释(例如第三方代码,如库),因此方法切入点是另一种选择?谢谢你的回答。我不知道我是否理解得很好。在全球范围内,我们可以使用这两种方法。第二种方法(with方法)是编写代码的更干净的方法。如果你有几个方法都有特定的建议,那就更好了。为什么你要用复杂的方式解释一件简单的事情呢?您可以使用
@Pointcut
,以避免冗余并启用切入点重用。更新切入点时,只需执行一次,而不是两次。如果只使用一次切入点,文字内联切入点会更好。如果以后您发现需要重新使用它,您仍然可以将其分解为单独的切入点定义。谢谢您的回答。我不知道我是否理解得很好。在全球范围内,我们可以使用这两种方法。第二种方法(with方法)是编写代码的更干净的方法。如果你有几个方法都有特定的建议,那就更好了。为什么你要用复杂的方式解释一件简单的事情呢?您可以使用@Pointcut
,以避免冗余并启用切入点重用。
@Component
@Aspect
public class TestAppli{
private static final Logger LOGGER = LoggerFactory.getLogger(TestAppli.class);
@Pointcut("@annotation(Loggable)")
public void executeLogging(){
}
@Before("executeLogging()")
public void method1(JoinPoint joinPoint){
LOGGER.info("method 1 is called");
}
@Before("executeLogging()")
public void method2(JoinPoint joinPoint){
LOGGER.info("method 2 is called");
}
}
@Component
@Aspect
public class TestAppli {
private static final Logger LOGGER = LoggerFactory.getLogger(TestAppli.class);
@Before("@annotation(Loggable)")
public void method1(JoinPoint joinPoint){
LOGGER.info("method 1 iscalled");
}
@Before("@annotation(Loggable)")
public void method2(JoinPoint joinPoint){
LOGGER.info("method 2 is called");
}
}