Spring Cloud AWS cglib问题

时间:2016-12-23 21:01:31

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

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

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

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

原因:

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.***.application.config.AwsConfig$$EnhancerBySpringCGLIB$$5301ed81]: No default constructor found; nested exception is java.lang.NoSuchMethodException: com.***.application.config.AwsConfig$$EnhancerBySpringCGLIB$$5301ed81.()
    at 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的更新版本?

1 个答案:

答案 0 :(得分: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插件的实际依赖项版本。