HK2 Proxy vs javax.inject.Provider - PullRequest
       40

HK2 Proxy vs javax.inject.Provider

0 голосов
/ 18 октября 2018

У меня есть две одноэлементные службы, связанные с инжектором зависимости (через Джерси):

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?

Обратите внимание, что единственное, что здесь рассматривается, - это синглтон-сервисы.

1 Ответ

0 голосов
/ 23 октября 2018

Это чисто мнение, но я бы предпочел прокси сам по большинству причин, которые вы упомянули.В общем случае лучше использовать прокси-интерфейсы, потому что тогда используются JDK-прокси, но если ваш класс Bar следует правилам прокси, у вас все равно должно быть все в порядке.

...