gpt4 book ai didi

java - seedstack 需要显式绑定(bind),并且 MYOBJECT 未显式绑定(bind)

转载 作者:行者123 更新时间:2023-11-30 06:01:01 27 4
gpt4 key购买 nike

我是一个使用seedstack“清洁Java开发”框架(seedstack.org)的新手。我的第一个操作是创建一个单例对象并在我的休息服务中调用它。但是seedstack抛出一个错误...

/*** MY SINGLETON ***/
package com.opel.application.partmapping.domain.shared;
import javax.inject.Singleton;

@Singleton
public class AppSingleton {
private String aSingleStr = "Xxxxxxx Yyyyy @ Zzzz" ;
public String getASingleStr() {
this.aSingleStr = this.aSingleStr + "x" ;
return this.aSingleStr;
}
}

/* 我的休息服务 */ 包 com.opel.application.partmapping.interfaces.rest;

import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;

import org.seedstack.seed.Application;
import org.seedstack.seed.Configuration;
import org.seedstack.seed.Logging;
import org.slf4j.Logger;

import com.opel.application.partmapping.domain.shared.AppConfig;
import com.opel.application.partmapping.domain.shared.AppSingleton;


@Path("hello")
public class HelloResource {

@Inject
private Application application;

@Inject
private AppSingleton theAppSingle;

@Logging
private Logger logger;

@Configuration
private AppConfig theAppConfig;

@GET
@Path("hello1")
public String hello1() {
logger.info("Hello Xxxxxxx... in hello1() ");
return "The author of this tool is ..." ;
}

@GET
@Path("hello2")
public String hello2() {
return "The author of this tool is ..." + theAppConfig.getTheAuthor();
}

@GET
@Path("hello3")
public String hello3() {
AppConfig myConfig = application.getConfiguration().get(AppConfig.class);

return "The author of this tool is ..." + myConfig.getTheAuthor();
}

@GET
@Path("hello4")
public String hello4() {

return "The singleton ..." + theAppSingle.getASingleStr();
}
}

Seedstack 抛出错误消息:

[ERROR] Failed to execute goal org.seedstack:seedstack-maven-plugin:2.7.1:watch (default-cli) on project PartMapper: An exception occurred while executing SeedStack application: [CORE] Unexpected exception: Unable to create injector, see the following errors:
[ERROR]
[ERROR] 1) Explicit bindings are required and com.opel.application.partmapping.domain.shared.AppSingleton is not explicitly bound.
[ERROR] while locating com.opel.application.partmapping.domain.shared.AppSingleton
[ERROR] for field at com.opel.application.partmapping.interfaces.rest.HelloResource.theAppSingle(HelloResource.java:22)
[ERROR] at org.seedstack.seed.rest.internal.RestModule.configure(RestModule.java:41) (via modules: com.google.inject.util.Modules$OverrideModule -> io.nuun.kernel.core.internal.injection.KernelGuiceModuleInternal -> org.seedstack.seed.rest.internal.RestPlugin$1 -> org.seedstack.seed.rest.internal.RestModule)

我不知道需要什么绑定(bind)以及如何以及在何处添加它们。谁能帮我解决这个问题吗?

最佳答案

此错误告诉您,当尝试注入(inject) AppSingleton 实例时,注入(inject)器不知道如何注入(inject)。 “如何注入(inject)某些东西”的注入(inject)器术语是“绑定(bind)”。将其视为注入(inject)规则。

在您的情况下,您可能会出现此错误,因为 @Singleton注释不足以创建绑定(bind):它只是指定潜在绑定(bind)的范围。

SeedStack 通过扫描类路径并查找感兴趣的类(例如 @Path 带注释的类是由 REST 模块自动绑定(bind)的 JAX-RS 资源)为您完成大量绑定(bind)。在您的情况下,您想要创建任意绑定(bind),因此您必须使用 @Bind注释:

import javax.inject.Singleton;
import org.seedstack.seed.Bind;

@Singleton
@Bind
public class AppSingleton {
private String aSingleStr = "Xxxxxxx Yyyy @ Zzzz" ;

public String getASingleStr() {
this.aSingleStr = this.aSingleStr + "x" ;
return this.aSingleStr;
}
}

请注意,我保留了 @Singleton注释,因为您首先想要一个单例。如果省略它,则只会有一个没有作用域的绑定(bind),这意味着每次必须注入(inject)实例时,都会创建一个新实例(有利于无状态)。

关于java - seedstack 需要显式绑定(bind),并且 MYOBJECT 未显式绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52278368/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com