Weblogic 12.1.3.0部署Spring应用报错求助:NoSuchMethodError
NoSuchMethodError: org.springframework.aop.framework.AopProxyUtils.getSingletonTarget问题 这个报错几乎可以肯定是Spring版本冲突导致的——WebLogic服务器自带了旧版本的Spring类库,而你的应用打包了更高版本的Spring,当WebLogic加载类时,优先使用了服务器自带的旧版本Spring,而getSingletonTarget方法是在较新的Spring版本中才引入的,旧版本没有这个方法,所以抛出了这个错误。
下面是具体的解决步骤:
步骤1:配置WebLogic类加载隔离,优先使用应用内的类
在你的应用的WEB-INF目录下创建或修改weblogic.xml文件,添加prefer-application-packages配置,告诉WebLogic优先加载应用自身打包的Spring、CXF、Hibernate相关类,而不是服务器自带的版本。示例配置如下:<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.7/weblogic-web-app.xsd"> <container-descriptor> <prefer-application-packages> <!-- 优先加载应用内的Spring所有包 --> <package-name>org.springframework.*</package-name> <!-- CXF相关包也需要隔离,避免和WebLogic自带的冲突 --> <package-name>org.apache.cxf.*</package-name> <!-- 如果Hibernate也有版本冲突,同样添加 --> <package-name>org.hibernate.*</package-name> </prefer-application-packages> </container-descriptor> </weblogic-web-app>步骤2:检查应用依赖,确保Spring版本统一
有时候应用自身的依赖也会混入不同版本的Spring jar,比如某些第三方依赖引入了旧版本的Spring。你可以用Maven的依赖树命令排查:mvn dependency:tree查看输出结果,找出所有Spring相关的依赖,确保它们的版本和你应用中使用的Spring主版本一致。如果发现冲突的旧版本依赖,在
pom.xml中用<exclusions>标签排除掉。步骤3:验证WebLogic的JMS/DataSource配置
虽然这个报错核心是类加载问题,但也可以快速确认一下WebLogic的JMS队列/连接池、DataSource的配置是否正确,避免因为资源配置问题间接引发类加载异常(比如初始化Spring上下文时因为资源无法获取导致的连锁问题)。
内容的提问来源于stack exchange,提问作者shred22

