Я разрабатываю API REST с использованием Jersey 2, и мне нужно, чтобы некоторые из моих классов были созданы при запуске, а не только когда запускается какой-то запрос ресурса.Что соответствует asEagerSingleton в HK2 в Джерси 2?
Так что я спрашиваю: как достичь того, что приведенный ниже пример SomethingImpl
создан при запуске сервера, а не только когда кто-то попадает на что-то ресурс? В Guice я бы использовал .asEagerSingleton()
.
Применение:
public class MyApplication extends ResourceConfig {
public MyApplication() {
register(new AbstractBinder() {
@Override
protected void configure() {
bind(" else").to(String.class);
bind(SomethingImpl.class).to(Something.class).in(Singleton.class);
}
});
register(SomeResource.class);
}
}
Что-то:
public interface Something {
String something();
}
public class SomethingImpl implements Something {
@Inject
public SomethingImpl(final String something) {
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
System.out.println(something() + something);
try {
Thread.sleep(4000);
} catch (final InterruptedException e) {
break;
}
}
}
}).start();
}
@Override
public String something() {
return "Something";
}
}
Некоторые ресурс:
@Path("/")
public class SomeResource {
private final Something something;
@Inject
public SomeResource(final Something something) {
this.something = something;
}
@GET
@Path("something")
public String something() {
return something.something();
}
}
не можете просто создать и привязать экземпляр 'SomethingImpl' вместо привязки тип класса? – Kapep
В этом упрощенном коде да. Но в моем реальном коде классы, которые мне нужны, имеют конструкторы, которые берут несколько инъецируемых объектов. – Stine