我有一个 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/