seedstack Явные привязки обязательны, а MYOBJECT явно не связан - PullRequest
0 голосов
/ 11 сентября 2018

Я новичок, использующий 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)

Я не знаю, какие привязки требуются и как и где их добавлять. Может кто-нибудь помочь мне решить эту проблему?

1 Ответ

0 голосов
/ 11 сентября 2018

Эта ошибка говорит о том, что при попытке внедрить экземпляр AppSingleton инжектор не знает как. Термин «инжектор» для слова «как ввести что-то» является «обязательным». Думайте об этом как правило инъекции.

В вашем случае вы можете использовать эту ошибку, потому что аннотации @Singleton недостаточно для создания привязки: она просто указывает область потенциальной привязки.

SeedStack выполняет множество привязок для вас, сканируя путь к классам и находя интересующие вас классы (например, @Path -аннотированные классы - это ресурсы JAX-RS, автоматически связанные модулем REST). В вашем случае вы хотите создать произвольную привязку, поэтому вы должны использовать аннотацию @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, поскольку вы сначала хотели синглтон. Если вы его опустите, у вас будет только привязка без области действия, а это означает, что каждый раз, когда экземпляр должен быть внедрен, будет создаваться новый (хорошо для безгражданства).

...