java - [TYPE] 类型的 Bean 'x' 不符合所有 BeanPostProcessors 的处理条件

标签 java spring spring-boot spring-aop

我有一个 ResourceAspect 类:

//@Component
@Aspect
public class ResourceAspect {

    @Before("execution(public * *(..))")
    public void resourceAccessed() {
        System.out.println("Resource Accessed");
    }

}

这是我的Application类:

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication springApplication = new SpringApplication(Application.class);
        springApplication.run(args);
    }
}

项目内部使用的依赖项是:

  • Spring 启动启动器
  • spring-boot-configuration-processor
  • spring-boot-starter-web
  • spring-boot-starter-test
  • spring-boot-devtools
  • spring-boot-starter-security
  • spring-boot-starter-aop

每当我将 @Component 添加到 ResourceAspect 时,resourceAccessed() 就会执行,但它也会抛出异常 Bean 'x类型为 [TYPE] 的 ' 不符合所有 BeanPostProcessor 处理的条件。如果没有 @Component,则 resourceAccessed() 不会执行。有什么想法吗?

最佳答案

我的猜测是你的切入点execution(* *(..))(基本上是“拦截世界”)影响了太多的组件,甚至是Spring内部的组件。只需将其限制为您真正想要应用方面的类或包,例如

execution(* my.package.of.interest..*(..))

within(my.package.of.interest..*) && execution(* *(..))

如果更容易指定,您还可以排除不需要编织的那些:

!within(my.problematic.ClassName) && execution(* *(..))

!within(my.problematic.package..*) && execution(* *(..))

顺便说一句,使用 Spring AOP(而不是 AspectJ)时,当然您的切面需要是 @Component

关于java - [TYPE] 类型的 Bean 'x' 不符合所有 BeanPostProcessors 的处理条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57629309/

相关文章:

java - JUnit:创建JavaBean时测试int类型的ID是否为null

java - 清洁 Swing 的 window

java - Java中的随机类

java - ES Rest High Level Client 空闲一段时间后抛出 SocketTimeoutException

spring - 尝试使用Nginx和docker将Spring引导中的LetsEncrypt添加到域时发生未经授权的错误

java - 如何在Spring Security中实现不同类型的用户

java - Jersey Rest 上的 "com.sun.jersey.api.container.ContainerException: The ResourceConfig instance does not contain any root resource classes"错误

java - 如何访问位于字符串中定义的包中的静态类?

Spring Feign 客户端调用在应该停留在 try block 时进入异常 block

javascript - Firebase 云消息传递仅适用于本地主机