Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring AOP建议使用方法而不是@annotation:为什么?_Java_Spring_Spring Aop_Aspect - Fatal编程技术网

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");
        }   
    }