Spring Aspect切面报错no match for this type name,配置哪里有误?
问题原因
你出现该报错的核心原因是切点表达式语法使用错误:
你当前写的within(@com.topjava.graduation.restaurant *)语法中,路径前的@表示匹配被com.topjava.graduation.restaurant这个注解修饰的类,但com.topjava.graduation.restaurant是你的包名而非注解类,所以Spring解析时找不到对应的注解类型,直接抛出invalidAbsoluteTypeName错误。
修复方案
如果你要匹配对应包及其子包下所有类的方法,去掉路径前的@,同时补全包路径通配符即可,修正后的切点表达式如下:
@Pointcut("within(com.topjava.graduation.restaurant..*)" + " || within(com.topjava.graduation.restaurant.service..*)" + " || within(com.topjava.graduation.restaurant.controller..*)") public void springBeanPointcut() { // 空方法,仅用作切点声明 }
注意:
包名..*表示匹配该包及其所有子包下的所有类,你如果已经写了根包com.topjava.graduation.restaurant..*,后面的service、controller包的匹配规则其实可以省略,已经被根包规则覆盖。
如果你的需求是更精准地匹配Spring管理的业务Bean,也可以直接按注解匹配,写法如下:
@Pointcut("@within(org.springframework.stereotype.Service) || @within(org.springframework.stereotype.RestController) || @within(org.springframework.stereotype.Controller)") public void springBeanPointcut() { }
其他排查点
如果修改后仍然有问题,可以依次检查以下配置:
- 确认项目已引入
aspectjweaver依赖,Spring AOP功能需要该依赖支持,Maven配置示例如下:
<dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> </dependency>
- 确认启动类上添加了
@EnableAspectJAutoProxy注解,开启AOP自动代理支持(SpringBoot高版本会自动装配,但手动添加可以避免自动装配失效问题) - 确认
LoggingAspect类所在的包在Spring的组件扫描路径下,否则切面不会被Spring容器加载生效
内容的提问来源于stack exchange,提问作者user16613329
相关产品推荐
相关产品推荐

