Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.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切入点不会触发_Java_Spring_Spring Mvc_Aop_Aspectj - Fatal编程技术网

Java Spring AOP切入点不会触发

Java Spring AOP切入点不会触发,java,spring,spring-mvc,aop,aspectj,Java,Spring,Spring Mvc,Aop,Aspectj,我不熟悉Spring和AOP。我正在尝试这个简单的方法,我已经创建了一个自定义注释,当它放在任何方法之前时,应该执行一些代码。 这是我创建的注释 // Declares a custom annotation that validates json @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface JsonSchemaAnnotation {

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

    // Declares a custom annotation that validates json
    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.METHOD)
    public @interface JsonSchemaAnnotation {
    }
接下来,我创建了Spring方面类,它保存逻辑

@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" />


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

我认为您需要完全限定名或方法中的参数:

FQN:

参数:

@Before("anyPublicMethod() && @annotation(jsonSchemaAnnotation)")
public void validateJson(ProceedingJoinPoint pjp, JsonSchemaAnnotation jsonSchemaAnnotation ) throws Throwable {
    System.out.println("Running");  
}
资料来源:


(您还需要使用bean,正如Dmitry Kuskov指出的那样,

我认为您需要在方法中使用完全限定名或参数:

FQN:

参数:

@Before("anyPublicMethod() && @annotation(jsonSchemaAnnotation)")
public void validateJson(ProceedingJoinPoint pjp, JsonSchemaAnnotation jsonSchemaAnnotation ) throws Throwable {
    System.out.println("Running");  
}
资料来源:


(您还需要使用bean,正如Dmitry Kuskov指出的那样,

我认为您需要在方法中使用完全限定名或参数:

FQN:

参数:

@Before("anyPublicMethod() && @annotation(jsonSchemaAnnotation)")
public void validateJson(ProceedingJoinPoint pjp, JsonSchemaAnnotation jsonSchemaAnnotation ) throws Throwable {
    System.out.println("Running");  
}
资料来源:


(您还需要使用bean,正如Dmitry Kuskov指出的那样,

我认为您需要在方法中使用完全限定名或参数:

FQN:

参数:

@Before("anyPublicMethod() && @annotation(jsonSchemaAnnotation)")
public void validateJson(ProceedingJoinPoint pjp, JsonSchemaAnnotation jsonSchemaAnnotation ) throws Throwable {
    System.out.println("Running");  
}
资料来源:


(正如Dmitry Kuskov指出的那样,您还需要使用bean,

您的代码有几个问题:

  • 您应该将
    ValidationTest
    对象创建为一个由Spring管理的bean,而不是使用new

  • 您的代码有几个问题:

  • 您应该将
    ValidationTest
    对象创建为一个由Spring管理的bean,而不是使用new

  • 您的代码有几个问题:

  • 您应该将
    ValidationTest
    对象创建为一个由Spring管理的bean,而不是使用new

  • 您的代码有几个问题:

  • 您应该将
    ValidationTest
    对象创建为一个由Spring管理的bean,而不是使用new


  • 我一直关注blog,您使用new创建了
    ValidationTest
    对象,因此它不是由Spring管理的。您必须将它作为应用程序上下文中的bean,然后通过
    context
    变量获取对它的引用刚才通过bean创建的。仍然没有任何改进。我认为我还缺少一些东西。我已经关注了blog您使用new创建
    ValidationTest
    对象,因此它不是由Spring管理的。您必须将它作为应用程序上下文中的一个bean,然后通过
    context
    变量获取对它的引用刚才通过bean创建了它。仍然没有改进。我想我还缺少一些东西。我已经关注了blogYou create使用new创建您的
    ValidationTest
    对象,因此它不是由Spring管理的。您必须将它作为应用程序上下文中的一个bean,然后通过您的
    上下文获取对它的引用
    变量刚刚通过bean创建了它。仍然没有改进。我想我还缺少一些东西。我已经跟随您创建了
    ValidationTest对象使用new,因此它不是由Spring管理的。您必须将它作为应用程序上下文中的bean,然后通过
    上下文获取对它的引用,然后通过您的
    变量刚刚通过bean创建了它。仍然没有改进。我想我还缺少一些东西。我以前尝试过两种完全限定名
    (“anyPublicMethod()&@annotation(com.fico.cardinal.cm.interceptor.JsonSchemaAnnotation)”
    和参数
    public void before(ProceedingJoinPoint pjp,JsonSchemaAnnotation JsonSchemaAnnotation)抛出了Throwable
    ,但在这两种情况下都不起作用。我尝试了前面的两种完全限定名
    (“anyPublicMethod()&@annotation”)(com.fico.cardinal.cm.interceptor.JsonSchemaAnnotation)
    和参数
    public void before(ProceedingJoinPoint pjp,JsonSchemaAnnotation JsonSchemaAnnotation)抛出Throwable
    ,但在这两种情况下都不起作用我尝试了两种完全限定名
    @before(“anyPublicMethod()&@annotation”)(com.fico.cardinal.cm.interceptor.JsonSchemaAnnotation)
    和参数
    public void before(ProceedingJoinPoint pjp,JsonSchemaAnnotation JsonSchemaAnnotation)抛出Throwable
    ,但在这两种情况下都不起作用我尝试了两种完全限定名
    @before(“anyPublicMethod()&@annotation”)(com.fico.cardinal.cm.interceptor.JsonSchemaAnnotation)
    和参数
    public void before(ProceedingJoinPoint pjp,JsonSchemaAnnotation JsonSchemaAnnotation)抛出Throwable
    ,但在这两种情况下都不起作用这应该起作用,我错过了错误的include名称:-)我需要使用带注释方法的参数。这就是我使用
    ProceedingJoinPoint
    的原因。不使用该参数,我应该如何访问参数?我已根据您的建议编辑了代码。(检查问题)但是我的方面类仍然没有被触发。你可以使用
    JoinPoint
    而不是
    ProceedingJoinPoint
    。你能更新你问题中的所有代码吗?我试图运行一个与你一样配置的应用程序,并触发了建议。还包括pom.xml的内容检查我编辑的代码。我还包括
    pom.xml
    是的,应该这样做,我错过了错误的include名称:-)我需要使用带注释方法的参数。这就是为什么我使用了
    ProceedingJoinPoint
    。如果不使用它,我应该如何访问参数?我已经根据您的建议编辑了我的代码。(检查问题)但是我的方面类仍然没有被触发。你可以使用
    JoinPoint
    而不是
    ProceedingJoinPoint
    。你能更新你问题中的所有代码吗?我试图运行一个与你一样配置的应用程序,并触发了建议。还包括pom.xml的内容检查我编辑的代码。我还包括
    pom.xml
    是的