У меня есть две одноэлементные службы, связанные с инжектором зависимости (через Джерси):
ResourceConfig.register(new AbstractBinder() {
@Override
protected void configure() {
bind(Foo.class)
.to(Foo.class)
.in(Singleton.class);
bind(Bar.class)
.to(Bar.class)
.in(Singleton.class);
}
});
Foo
использует Bar
, поэтому я могу просто сделать следующее:
public class Foo {
@javax.inject.Inject private Bar bar;
}
Если Foo
использует только Bar
редко, то я могу отложить его построение:
public class Foo {
@javax.inject.Inject private javax.inject.Provider<Bar> bar;
}
Я также прочитал, что в целом рекомендуется использовать Provider
, поскольку он избегает этой энергичной оценки и циклическогозависимости (хотя я все равно стараюсь их избегать).
Но как насчет того, чтобы сделать это прокси?
ResourceConfig.register(new AbstractBinder() {
@Override
protected void configure() {
bind(Foo.class)
.to(Foo.class)
.in(Singleton.class)
.proxy(true)
.proxyForSameScope(true);
bind(Bar.class)
.to(Bar.class)
.in(Singleton.class)
.proxy(true)
.proxyForSameScope(true);
}
});
Я новичок в инъекциях, поэтому не уверен в истории.Являются ли они фактически одной и той же концепцией для двух разных платформ?
Прокси-сервер делает код более привлекательным и заставляет задуматься создателя сервиса, а не его пользователя (что может быть или не быть желательным),Есть ли какой-либо недостаток в этом отношении по сравнению с Provider
?
Обратите внимание, что единственное, что здесь рассматривается, - это синглтон-сервисы.