程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了带有 Kotlin 类的 Micronaut 没有实例化 @Singleton 注释大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决带有 Kotlin 类的 Micronaut 没有实例化 @Singleton 注释?

开发过程中遇到带有 Kotlin 类的 Micronaut 没有实例化 @Singleton 注释的问题如何解决?下面主要结合日常开发的经验,给出你关于带有 Kotlin 类的 Micronaut 没有实例化 @Singleton 注释的解决方法建议,希望对你解决带有 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,请注明来意。