【问题标题】:Spring Cloud AWS cglib issueSpring Cloud AWS cglib 问题
【发布时间】:2017-05-09 12:49:33
【问题描述】:

我有一个现有的 Spring Boot 项目 (1.4.3.RELEASE),并正在尝试使用 Cloud AWS 项目添加一些功能。但是,在实例化我的 @Configuration 类之一时,仅将依赖项添加到 gradle 构建文件会导致明显的 cglib 问题。

将以下行添加到 gradle build 并运行应用程序:

compile("org.springframework.cloud:spring-cloud-starter-aws-messaging:1.1.3.RELEASE")

原因:

原因:org.springframework.beans.BeanInstantiationException:无法实例化 [com.***.application.config.AwsConfig$$EnhancerBySpringCGLIB$$5301ed81]:未找到默认构造函数;嵌套异常是 java.lang.NoSuchMethodException: com.***.application.config.AwsConfig$$EnhancerBySpringCGLIB$$5301ed81.()
    在 org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:85) ~[spring-beans-4.3.5.RELEASE.jar:4.3.5.RELEASE]

它抱怨在我的@Configuration 类中找不到非空构造函数,但最新版本的 Spring 支持这些构造函数。如果我删除依赖项,应用程序可以正常启动。如何在不重新配置我的课程的情况下解决这个问题?等待 Cloud AWS 的更新版本?

【问题讨论】:

  • 此版本的 AWS 消息传递基于 Spring Boot 1.3,它使用不支持非空构造函数的 Spring 4.2。您可以尝试将 spring 依赖项强制为 4.3,但它使用 Spring Boot 1.3 的事实可能使其不适用于 1.4(Boot 的内部 API 更改等)。
  • 感谢您的回复。我将类重新配置为具有一个空的构造函数并自动装配依赖项,但现在即使自动装配行为也无法正常工作。不知道为什么添加它会导致核心 Spring 行为如此混乱,但是哦,好吧。我会看看我是否能想出一个黑客解决方法。
  • 也只是为了更新...我将 Spring Boot 版本降级到 1.3.8,但我仍然遇到同样的问题,即配置类没有自动装配它的字段。删除该依赖项,一切正常。
  • 当然,您仍然会遇到与整个问题相同的问题。如果有什么你应该强制它到 1.4 但这可能会使其他事情不起作用。

标签: java spring spring-boot spring-cloud spring-cloud-aws


【解决方案1】:

您需要将应用配置为使用 BOM 依赖项以避免依赖项冲突。 BOM 更像是一个 maven 功能(您可以阅读 here),但 Spring 人员已经提出了一个 Gradle 插件来允许相同的行为。查看这个Spring Blog Post 以获得完整的解释。但基本上将其添加到您的 gradle 配置中:

buildscript {
  repositories {
    mavenCentral()
  }
  dependencies {
    classpath "io.spring.gradle:dependency-management-plugin:1.0.0.RC1"
  }
}

apply plugin: "io.spring.dependency-management"

你可以这样做:

dependencyManagement {
  imports {
    mavenBom 'org.springframework.boot:spring-boot-starter-parent:1.4.2.RELEASE'
  }
}

dependencies {
  compile "org.springframework.boot:spring-boot-starter-web"
}

你不必指定spring boot插件的实际依赖版本。

【讨论】:

    猜你喜欢
    • 2016-09-29
    • 2021-04-20
    • 1970-01-01
    • 2020-06-22
    • 2017-05-22
    • 1970-01-01
    • 2019-03-22
    • 2020-12-09
    • 2019-08-18
    相关资源
    最近更新 更多