gpt4 book ai didi

java - Spring AOP切入点不触发

转载 作者:行者123 更新时间:2023-12-01 22:10:01 25 4
gpt4 key购买 nike

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

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

接下来我创建了包含逻辑的 Spring Aspect 类

@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. 您应该创建您的ValidationTest对象作为 Spring 管理的 bean 且不使用 new
  2. <aop:include name="UpdateUIMetadataInterceptor" />应该是<aop:include name="updateUI"/> ;你实际上可以坚持使用 <aop:aspectj-autoproxy/>为了简单起见
  3. ProceedingJoinPoint之前的方面不支持,因此将其删除;您可以使用JoinPoint相反,如果您需要访问参数
  4. JsonSchemaAnnotation jsonSchemaAnnotation validateJson 应该存在参数你的方面的方法,如 frant.hartm 所指出的

关于java - Spring AOP切入点不触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31986336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com