当前位置: 首页 > 知识库问答 >
问题:

在HttpServletResponse sendRedirect编译但不触发切入点之前

仲璞瑜
2023-03-14

我目前正在尝试使用aspectj和Spring aop为调用HttpServletResponse.send重定向(api dochttp://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletResponse.html)添加一个切入点。类和切入点的代码如下:

@Aspect
@Log4j
class ExampleAspect {

    @Before("execution(* javax.servlet.http.HttpServletResponse.sendRedirect(..))")
    void logRedirectBeforeSending() {
          log.warn('holy cow batman, its a redirect!')
    }
}

目前,尽管上面的代码编译了,但它实际上从未执行过(日志中缺少警告输出和通知代码中的调试断点从未被命中就证明了这一点)。

虽然为了简单起见,我在这里省略了它们,但方面包含其他可以正确触发的切入点,因此我排除了方面配置作为潜在原因的可能性(这就是为什么我不包括我的spring bean配置)。

此外,我通过调试再次检查了实现HttpServletResponse的类。当我测试切入点时,会调用sendRedirect()(如果有帮助的话,正在调用的实现类之一是org.apache.catalina.connector.Response)https://tomcat.apache.org/tomcat-6.0-doc/api/org/apache/catalina/connector/Response.html).

在围绕接口定义切入点时,我的切入点定义中是否缺少一些必要的东西?从Spring AOP文档中可以看出,它不需要任何特殊语法。

我一直在玩切入点定义的变化,但还没有任何运气。

总而言之,我被难住了,有什么想法吗?

共有1个答案

王长卿
2023-03-14

我希望您的响应对象不是来自Spring应用程序上下文,因此它不受您的方面的约束。

从Spring bean发起调用并不重要。在Spring bean上调用调用很重要。例如,如果您编写了一个切入点以应用于StringBuffer中的append方法,然后您执行了类似于newstringbuffer()的操作。append('something'),将不会应用切入点,因为您正在交互的StringBuffer不是Spring bean。我不知道你的应用程序是如何组合在一起的,但除非你的回答来自Spring环境,否则我不希望你的切入点被应用。

 类似资料:
  • 我对Spring和AOP是新手。我正在尝试这个简单的事情,我已经创建了一个自定义注释,当放在任何方法之前时,它应该执行一些代码。这是我创建的注释 问题是我的spring aop从来没有被触发过。我在中包含了一个bean 有人能指出我缺少什么吗?

  • 问题是@before和@afterreturn有效,但对于pointcut却不是这样。

  • wanner测试spring boot(1.5.20)aop(最小代码) 类被aopped时, 请让我知道我错过了什么

  • 也许有人能帮我澄清一下。 我正在尝试编写一个插入前触发器,如果它留空,可以设置关闭。这可能吗? 没有太多代码可显示。我所做的只是创建了一个带有调试语句的简单的插入前触发器,以确保我的触发器在验证规则之前执行。似乎验证规则是第一位的(我显然无法更改它)。触发器永远不会触发。 这是可行的还是不可能的?

  • 问题内容: 我不得不发现我的项目中有Java代码,该代码可以在Eclipse中编译并正常运行,但是会在javac中引发编译错误。 一个完整的代码段: javac中的编译返回: 现在,此错误阻止在Maven中构建项目。由于Eclipse编译器具有更高的容忍度,因此我现在不得不假设代码段的定义和用法如上所述,静态方法不是有效的Java吗? 问题答案: 似乎Sun的1.6 JDK无法推断正确的类型。以下

  • 下面的代码在g7.2.0中编译成功(编译标志是),但在clang 5.0.0中编译失败(使用相同的标志,)和vc 15.4(编译标志是): 哪种编译器行为符合标准?如何将该模板应用更改为在clang上编译? 叮当声错误消息: VC错误消息: