Java 在控制器类中使用自定义注释时自动关联不起作用

Java 在控制器类中使用自定义注释时自动关联不起作用,java,spring,spring-mvc,spring-aop,Java,Spring,Spring Mvc,Spring Aop,我试着为记录方法执行时间做一个自定义注释,它工作得很好,直到我对不在控制器类中的方法使用注释为止。在控制器类中使用时,其他类(服务类)的自动连接失败,并给出空指针异常 @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface LogExecutionTime { } -- 当我在控制器以外的任何类上使用此注释时,它工作正常 @RestController public class Proj

我试着为记录方法执行时间做一个自定义注释,它工作得很好,直到我对不在控制器类中的方法使用注释为止。在控制器类中使用时,其他类(服务类)的自动连接失败,并给出空指针异常

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LogExecutionTime {
}
--

当我在控制器以外的任何类上使用此注释时,它工作正常

@RestController
public class ProjectController {

    @Autowired
    ProjectService projectService;

    @GetMapping("/testTimeTaken")
    @LogExecutionTime
    private String testTimeTaken() {
        return projectService.dummyMethod();
    }

}
您不能使用方面来“捕获”私有方法

从Spring参考:

由于Spring的AOP框架基于代理的特性,受保护的方法根据定义是不被拦截的,既不适用于JDK代理(如果这不适用),也不适用于CGLIB代理(如果这在技术上是可能的,但不推荐用于AOP目的)。因此,任何给定的切入点将只与公共方法匹配! 如果您的拦截需要包括受保护的/私有的方法,甚至是构造函数,请考虑使用Spring驱动的原生AspectJ编织,而不是Spring基于代理的AOP框架。这构成了一种不同的AOP使用模式,具有不同的特性,因此在做出决定之前,一定要先熟悉编织


因此,您可以做的最好的事情是更改您的方法public-->
public String testtimetake()

您可以继续并共享stacktrace以及与服务相关的代码吗?
@RestController
public class ProjectController {

    @Autowired
    ProjectService projectService;

    @GetMapping("/testTimeTaken")
    @LogExecutionTime
    private String testTimeTaken() {
        return projectService.dummyMethod();
    }

}