Dropwizard: интеграция Google Guice

Я пытаюсь использовать внедрение зависимостей в DropWizard с Google Guice, но у меня много проблем. Поэтому я запрограммировал простой код, как показано ниже, чтобы найти основную проблему. Ошибки находятся в классе Test, строка:testservice.Result (10,10,10). - Синтаксическая ошибка на токене "(", {ожидается после этого токена - Синтаксическая ошибка на токене, вместо этого ожидается ConstructorHeaderName - Синтаксическая ошибка на токене "Result", недопустимое AnnotationName

почему я не могу использовать объект testservice?

Спасибо за вашу помощь.

package dropwizard.GoogleGuiiice;
import io.dropwizard.Application;
import io.dropwizard.setup.Bootstrap;
import io.dropwizard.setup.Environment;

public class GoogleGuiiiceApplication extends Application<GoogleGuiiiceConfiguration> {
public static void main(final String[] args) throws Exception {
    new GoogleGuiiiceApplication().run(args);
}
@Override
public String getName() {
    return "GoogleGuiiice";
}
@Override
public void initialize(final Bootstrap<GoogleGuiiiceConfiguration> bootstrap) {
    // TODO: application initialization
}
@Override
public void run(final GoogleGuiiiceConfiguration configuration,
                final Environment environment) {
    // TODO: implement application
    environment.jersey().register(new Test ());
}

}

import com.google.inject.Guice;
import com.google.inject.Injector;

public class Test {
Injector guice=Guice.createInjector(new OperationModule());
TestService testservice=guice.getInstance(TestService.class);   
testservice.Result (10,10,10);

}

public interface Operation {
int getResult(int a, int b);

}

public class Somme implements Operation{
@Override
public int getResult(int a, int b){
    return a+b;
}

}

public class OperationModule extends com.google.inject.AbstractModule{
@Override
protected void configure(){
    bind(Operation.class).to(Somme.class);
}

}

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import com.google.inject.Inject;
public class TestService {
@Inject
Operation Op;

@GET
@Path("{a}/{b}")
public int Result (int c, @PathParam(value="a")int a, @PathParam(value="b")int b){
    int SommeFinale=c + Op.getResult(a,b);
    return SommeFinale;
}

}

2 ответа

Мне не ясно, что вы на самом деле пытаетесь сделать здесь, но чтобы ответить на ваш вопрос с чисто Java-точки зрения, синтаксическая ошибка заключается просто в том, что вам не разрешено выполнять произвольные операторы в этот момент в вашем коде.

Если вы действительно хотите выполнить этот оператор в этот момент, то вам нужно либо обернуть его в фигурные скобки, чтобы он находился в блоке инициализатора, но это, вероятно, будет бессмысленно, учитывая реализацию, поскольку результат отбрасывается

{
  testService.Result(10,10,10);
}

или вам нужно присвоить результат в поле

int useMe = testService.Result(10,10,10);

Другие варианты заключаются в том, что вы можете выполнить инструкцию в конструкторе или методе класса Test.

Я надеюсь, что этот урок может помочь. Интеграция Dropwizard и Guice

Другие вопросы по тегам