Java异常 #IllegalArgumentException: warning no match for this type name: com.wei.cloud.aop

本文详细解析了在使用Spring AOP与AspectJ进行切面编程时遇到的IllegalArgumentException异常,分析了异常原因,包括类名或类路径错误以及表达式书写问题,并提供了两种解决方案:通配切入和精准切入。

1.异常现象

Caused by: java.lang.IllegalArgumentException: warning no match for this type name: com.wei.cloud.aop [Xlint:invalidAbsoluteTypeName]

Caused by: java.lang.IllegalArgumentException: warning no match for this type name: com.wei.cloud.aop [Xlint:invalidAbsoluteTypeName]
	at org.aspectj.weaver.tools.PointcutParser.parsePointcutExpression(PointcutParser.java:301)
	at org.springframework.aop.aspectj.AspectJExpressionPointcut.buildPointcutExpression(AspectJExpressionPointcut.java:217)
	at org.springframework.aop.aspectj.AspectJExpressionPointcut.checkReadyToMatch(AspectJExpressionPointcut.java:190)
	at org.springframework.aop.aspectj.AspectJExpressionPointcut.getClassFilter(AspectJExpressionPointcut.java:169)
	at org.springframework.aop.support.AopUtils.canApply(AopUtils.java:220)
	at org.springframework.aop.support.AopUtils.canApply(AopUtils.java:279)
	at org.springframework.aop.support.AopUtils.findAdvisorsThatCanApply(AopUtils.java:311)
	at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findAdvisorsThatCanApply(AbstractAdvisorAutoProxyCreator.java:119)
	at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findEligibleAdvisors(AbstractAdvisorAutoProxyCreator.java:89)
	at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.getAdvicesAndAdvisorsForBean(AbstractAdvisorAutoProxyCreator.java:70)
	at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.wrapIfNecessary(AbstractAutoProxyCreator.java:346)
	at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessAfterInitialization(AbstractAutoProxyCreator.java:298)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:423)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1633)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555)
	... 38 more

 

2.排查分析

此类型名称不匹配

参数非法:没有与类型匹配的参数

一般可能是类名、类路径哪里有问题,先确认一下。再就是写法可能哪里有问题。

 

3.解决方案

3.1.通配切入


@Pointcut("execution(public * com.weix.service..*ServiceImpl.*(..)) " +
       "|| execution(public * com.weix.service..*ManagerImpl.*(..))")
public void point() {
}

 

3.2.精准切入 

@Pointcut("execution(public * com.weix.service.im.impl.LcServiceImpl.sendMsg(..)) " +
       "|| execution(public * com.weix.service.im.impl.TxServiceImpl.sendMsg(..))")
public void sendMsg() {
}

 

### Java 中关于 `AOP.homework.homework01` 的 `IllegalArgumentException` 问题分析与解决方案 #### 问题描述 在使用 AOP(面向切面编程)模块中的 `homework.homework01` 类时,可能会遇到 `java.lang.IllegalArgumentException: invalidAbsoluteTypeName` 错误。此类错误通常发生在尝试加载类或解析全限定名路径失败的情况下。 这种异常可能由多种因素引起,包括但不限于以下几种情况: - 提供的类名称不符合标准格式。 - 路径中存在非法字符或拼写错误。 - JDK 版本不兼容导致的行为差异[^3]。 --- #### 原因分析 该问题的核心在于传递给方法的参数未能满足预期的要求。具体来说: 1. **类名格式错误** 如果传入的方法参数不是有效的绝对类名(即未遵循包名加类名的形式),则会抛出此异常。例如,“homework/homework01” 或 “homework..homework01” 都可能导致验证失败[^1]。 2. **路径中含有非法字符** 当字符串作为文件路径或其他资源定位符的一部分时,如果其中包含特殊字符(如 `%`, `<`, `>`, `"`, `\` 等),也可能触发类似的异常[^2]。 3. **JDK 版本冲突** 不同版本的 JDK 对于某些 API 实现可能存在细微差别,尤其是涉及加密算法、反射机制等领域时更为明显。因此更换运行环境后需重新测试配置是否匹配目标需求。 --- #### 解决方案 以下是针对上述三种常见成因提出的对应处理办法: ##### 方法一:校验输入合法性 确保所使用的类型标识符严格遵守 Java 定义的标准形式——完整的包结构加上具体的简单名字组合而成的一个字符串表示法。可以通过正则表达式来辅助完成初步筛查工作如下所示: ```java public static boolean isValidClassName(String className){ String regex = "[a-zA-Z_$][a-zA-Z\\d_$]*((\\.[a-zA-Z_$][a-zA-Z\\d_$]*)*)?"; return Pattern.matches(regex,className); } if(!isValidClassName(yourInput)){ throw new IllegalArgumentException("invalid absolute type name"); } ``` 此处定义了一个简单的函数用于判断某个特定值能否被视作合法的完全限定类别标签。 ##### 方法二:清理并转义敏感符号 对于那些确实需要保留非字母数字成分的情况,则应该考虑采用 URL 编码等方式对其进行适当转换后再进一步操作;另外还可以利用 Apache Commons Lang 库里的工具类来进行更全面的安全性保障措施实施过程演示代码片段见下文: ```xml <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.9</version> </dependency> ``` 之后就可以这样调用了: ```java String sanitizedPath = StringUtils.replaceEach( originalPath, new String[]{"%", "<", ">", "\"", "\\"}, new String[]{"%25", "%3C", "%3E", "%22", "/"} ); // Now use 'sanitizedPath' instead of 'originalPath' ``` 这种方法能够有效地规避掉大部分由于意外嵌套而导致崩溃的风险点所在位置处产生的副作用影响效果显著提升整体稳定性表现优异值得推荐给大家试用看看哦😊. ##### 方法三:统一开发平台设置 最后也是最容易忽略的一环就是确认整个项目生命周期内的所有环节都基于相同的基础架构之上构建起来才行得通无阻塞顺畅运作下去嘛😏所以建议大家最好一开始就明确规定好要用哪个确切编号序列号标记出来的发行版实例化对象执行相应功能逻辑单元测试完毕提交上线部署之前再仔细核查一遍有没有遗漏更改过的部分以免后期维护成本过高难以承受压力过大崩盘啦?? --- ### 总结 通过对以上三个方面的深入探讨可以看出造成这个问题背后隐藏着多方面深层次的原因所在只有找到真正根源才能彻底根治杜绝再次发生类似事件的发生几率达到理想状态下的完美程度追求极致用户体验满意度最大化原则指导下不断优化改进现有技术体系框架结构设计模式从而实现更高层次上的飞跃发展成就辉煌未来梦想成真之路越走越宽广无限美好前景展现在眼前让我们一起携手共创更加灿烂美好的明天吧💪✨🎉👏! --- ####
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值