Spring AOP切入点不会触发

我是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");

}

问题是我的春天aop从未触发。我已经在我的豆子里configuration.xml

<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所指出的,应该为您所用的方法提供参数

以上是 Spring AOP切入点不会触发 的全部内容, 来源链接: utcz.com/qa/406162.html

回到顶部