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

Spring AOP切入点不触发

锺威
2023-03-14

我对Spring和AOP是新手。我正在尝试这个简单的事情,我已经创建了一个自定义注释,当放在任何方法之前时,它应该执行一些代码。这是我创建的注释

    // Declares a custom annotation that validates json
    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.METHOD)
    public @interface JsonSchemaAnnotation {
    }
@Aspect
public class UpdateUIMetadataInterceptor {

@Pointcut("execution(public * com.fico.cardinal.cm.*.*(..))")
public void anyPublicMethod() {
    System.out.println("Running");
}

@Before("anyPublicMethod() && @annotation(jsonSchemaAnnotation)")
public void validateJson(ProceedingJoinPoint pjp) throws Throwable {
    System.out.println("Running");  
}

}
public class ValidationTest {

public static void main(String[] args) {
    ApplicationContext context = new ClassPathXmlApplicationContext("spring/configuration.xml");
    String jsondata = "{\"id\": \"EXPENSE_REPORT\",\"properties\": {\"transactionType\": \"EXPENSE_REPORT\"},\"sections\": []} ]}";
    ValidationTest test = new ValidationTest();
    test.jsonValidationTest("dummy", jsondata);
    ((AbstractApplicationContext) context).close();


}

@JsonSchemaAnnotation
public void jsonValidationTest(String dummy, String jsondata) {
    System.out.println("Success");

}

问题是我的spring aop从来没有被触发过。我在configuration.xml中包含了一个bean

<aop:aspectj-autoproxy>
    <aop:include name="UpdateUIMetadataInterceptor" />
</aop:aspectj-autoproxy>
<bean id="updateUI"      class="com.fico.cardinal.cm.interceptor.UpdateUIMetadataInterceptor" />

有人能指出我缺少什么吗?

共有1个答案

张淳
2023-03-14

您的代码有几个问题:

  1. 您应该将validationtest对象创建为由Spring管理的bean,而不是使用new
  2. 应为 ;为了简单起见,您实际上可以使用
  3. ProceedingJoinPoint不支持before方面,因此删除它;如果需要访问参数,可以使用joinpoint
  4. 正如frant.hartm指出的那样, JSONSchemaAnnotation JSONSchemaAnnotation参数应该用于您方面的ValidateJSON方法

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

  • 我目前正在尝试使用aspectj和Spring aop为调用HttpServletResponse.send重定向(api dochttp://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletResponse.html)添加一个切入点。类和切入点的代码如下: 目前,尽管上面的代码编译了,但它实际上从未执行过(日志中缺少警告输出和

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

  • 下面是我的代码片段: 服务我mpl.java 现在,我想要的是每当从方法worker(请求,字符串id)抛出null点异常时,我想要执行一些特定的任务,如上图所示。为此,我编写了一个方面类,如下所示: 我的方面。Java语言 电流输出: 期望输出: 如您所见,没有被触发,因此没有打印值。这是什么原因? 注: > 还尝试更改方法的名称,以消除任何也不起作用的重载问题。 到目前为止,尝试了各种其他切入

  • 在Spring boot AOP应用程序中,我有一个切入点。如果放在使用此注释注释的执行对象或注释的方法上,则应执行建议。 当我运行应用程序时 这里讨论了一个类似的问题,但切入点似乎太宽了,而我的切入点不是,因为我在项目中只有几个带有注释的类。 我把这个注释放在假客户端界面上,就像这样。 你知道我的切入点怎么了吗?

  • 问题内容: 我正在使用Spring框架(2.5)及其AOP功能。我有一个切入点表达,例如 凡ItemReader接口是一个Spring接口,它的签名是: 该接口有一个名为“ read”的方法,我要对其应用此建议:方法签名为: 但是,当我使用上述切入点表达式运行应用程序时,出现以下异常: java.lang.IllegalArgumentException:警告与此类型名称不匹配:org.sprin