【发布时间】: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