Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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
Spring 弹簧-罐';不要让简单的方面工作_Spring_Spring Mvc_Aop_Aspectj - Fatal编程技术网

Spring 弹簧-罐';不要让简单的方面工作

Spring 弹簧-罐';不要让简单的方面工作,spring,spring-mvc,aop,aspectj,Spring,Spring Mvc,Aop,Aspectj,错误 MAVEN依赖 SEVERE: Servlet.service() for servlet [appServlet] in context with path [/callcentre] threw exception [Request processing failed; nested exception is java.lang.IllegalArgumentException: object is not an instance of declaring class HandlerM

错误

MAVEN依赖

SEVERE: Servlet.service() for servlet [appServlet] in context with path [/callcentre] threw exception [Request processing failed; nested exception is java.lang.IllegalArgumentException: object is not an instance of declaring class
HandlerMethod details: 
Controller [$Proxy109]
Method [public final java.lang.String au.com.mycompany.web.controllers.DummyControllerImpl.dummy()]
Resolved arguments: 
] with root cause
java.lang.IllegalArgumentException: object is not an instance of declaring class
...
控制器接口

@Aspect
@Component
public class JsonAspect {

    @Before("execution(public * au.com.mycompany.web.controllers.DummyController.dummy(..))")
    public final void beforeMethod1(final JoinPoint joinPoint) {
        System.out.println("Intercepted.............");
        System.out.println(joinPoint.getSignature().getName());
    }

}
控制器IMPL

@Controller
public interface DummyController {

    @RequestMapping(value = "/dummy", method = RequestMethod.GET)
    @ResponseBody
    String dummy();

}

我假设这不再相关,但我遇到了完全相同的问题,解决方案是在应用程序上下文中设置这一点:

@Controller
public class DummyControllerImpl implements DummyController {

    @Override
    public final String dummy() {
        System.out.println("IT WORKED..........");
        return "it returned";
    }
}

根本原因是,为此类生成的AOP自动代理是JdkAutoProxy而不是CGLIB生成的代理-这导致API的spring MVC调用失败,因为代理与控制器的类型不同。
之所以使用此JdkAutoProxy,是因为此特定控制器实现了一个接口,这会导致spring自动使用JDK自动代理。

尝试从参数部分“执行(public*au.com.mycompany.web.controllers.DummyController.dummy(..)”->执行中删除“..”(public*au.com.mycompany.web.controllers.DummyController.dummy())这不起作用,仍然会收到相同的错误。
@Controller
public interface DummyController {

    @RequestMapping(value = "/dummy", method = RequestMethod.GET)
    @ResponseBody
    String dummy();

}
@Controller
public class DummyControllerImpl implements DummyController {

    @Override
    public final String dummy() {
        System.out.println("IT WORKED..........");
        return "it returned";
    }
}
<aop:aspectj-autoproxy proxy-target-class="true"/>