大佬教程收集整理的这篇文章主要介绍了带有 Kotlin 类的 Micronaut 没有实例化 @Singleton 注释,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个 Micronaut 应用程序,其中包含用 Java 和 Kotlin 编写的模块。 Java 模块(控制器逻辑)有一个接口,由 Kotlin 类实现,并指定 @Singleton 注解。
但是在运行时,Kotlin 实现类没有被实例化,并且由于以下异常而失败。 “内部服务器错误:无法为类的参数 [] 注入值。不存在 [] 类型的 bean...”
如果实现类也是用 Java 编写的,则同样适用。 有什么想法吗?
以下是示例源文件: 控制器 - DemoController.java, 接口 - message.java, 实现 - messageImpl(kotlin 文件)
package com.example.controllers;
import com.example.service.message;
import io.micronaut.http.MediaType;
import io.micronaut.http.Annotation.Controller;
import io.micronaut.http.Annotation.Get;
import javax.inject.Inject;
@Controller("/Hello")
public class DemoController {
private message message;
@Inject
public DemoController(message messagE) {
this.message = message;
}
@Get(produces = MediaType.TEXT_PLAIN)
public String sayHello() {
return message.getmessage();
}
}
package com.example.service;
public interface message {
String getmessage();
}
package com.example.service
import javax.inject.Singleton
@Singleton
class messageImpl: message {
overrIDe fun getmessage(): String {
return "Hello"
}
}
注意:https://github.com/micronaut-projects/micronaut-core/discussions/5254 包含应用程序 jar (demo.zip) 和重现步骤。
问题是你的项目没有正确配置。您使用的是 Kotlin,但您的 build.gradle
文件仅针对 Java 进行了配置。
如果您创建一个新的 Kotlin application with Launch,您可以获得正确构建的示例。
为了使它工作,我所做的唯一更改是主类,因为您使用的是 Java 类而不是 Kotlin 类。
这是完整的build.gradle
:
plugins {
id("org.jetbrains.kotlin.jvm") version "1.4.30"
id("org.jetbrains.kotlin.kapt") version "1.4.30"
id("org.jetbrains.kotlin.plugin.allopen") version "1.4.30"
id("com.github.johnrengelman.shadow") version "6.1.0"
id("io.micronaut.application") version "1.4.2"
}
version = "0.1"
group = "com.example"
repositories {
mavenCentral()
}
micronaut {
runtime("netty")
testRuntime("junit5")
processing {
incremental(true)
Annotations("com.example.*")
}
}
dependencies {
implementation("io.micronaut:micronaut-http-client")
implementation("io.micronaut:micronaut-runtime")
implementation("io.micronaut.kotlin:micronaut-kotlin-runtime")
implementation("javax.Annotation:javax.Annotation-api")
implementation("org.jetbrains.kotlin:kotlin-reflect:${kotlinVersion}")
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:${kotlinVersion}")
implementation("io.micronaut:micronaut-validation")
runtimeOnly("ch.qos.logBACk:logBACk-classic")
runtimeOnly("com.fasterxml.jackson.module:jackson-module-kotlin")
}
application {
mainClass.set("com.example.Application")
}
java {
sourceCompatibility = JavaVersion.toVersion("11")
}
tasks {
compileKotlin {
kotlinOptions {
jvmTarget = "11"
}
}
compileTestKotlin {
kotlinOptions {
jvmTarget = "11"
}
}
}
以上是大佬教程为你收集整理的带有 Kotlin 类的 Micronaut 没有实例化 @Singleton 注释全部内容,希望文章能够帮你解决带有 Kotlin 类的 Micronaut 没有实例化 @Singleton 注释所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。