Вопрос по java, spring, guice – Что такое Spring-эквивалент для экземпляра CDI или поставщика Guices

19

В CDI вы можете определить объект, который даст вам элементы определенного типа, используя:

@Inject
Instance<MyObject> myObjectInstance;
//...
MyObject myObjectInstance.get();

Аналогично в Guice вы можете сделать:

@Inject
Provider<MyObject> myObjectInstance;
//...
MyObject myObjectInstance.get();

Мне интересно, есть ли подобная конструкция в Spring, или вы должны использоватьApplicationContext чтобы получить ссылку?

Ваш Ответ

2   ответа
15

Поэтому после долгих раскопок я обнаружил, что Spring поддерживает JSR-330. Этот JSR определяет простой API - вся спецификация буквально является только этим API - который стандартизирует несколько интерфейсов внедрения зависимостей, аннотаций и поведения.

В отличие от весныFactoryBean javax.inject.Provider Интерфейс не выдает исключение при получении ссылки на компонент. Кроме того, вам все равно нужно будет определить этот FactoryBean в каком-то месте (читать XML или@Configuration класс, а это неоптимально).

Из-за ошибки в текущей версии 3.1.1 javax.inject.Providerdoes not work, Этоdoes work весной 3.1.0.

Чтобы использовать его, вам просто нужно включить javax.inject jar - если вы используете maven, вы можете:

    <dependency>
        <groupId>javax.inject</groupId>
        <artifactId>javax.inject</artifactId>
        <version>1</version>
    </dependency>

Spring обнаружит это, и с этого момента вы можете просто:

@Inject
Provider<MyObject> myObjectInstance;
//...
MyObject myObjectInstance.get();

как в примере Guice, так как это тот же API.

Несмотря на мой предыдущий комментарий к Константину, веснаdoes create Поставщик сам по себе. (Я тестировал его на Spring 3.1.1 и столкнулся с этимПроблема регрессии Spring Provider)

Instance<>Error: User Rate Limit Exceeded bogdan.mustiata
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Here is a questionError: User Rate Limit ExceededProviderError: User Rate Limit ExceededInstance.
2

Звучит какFactoryBean

Error: User Rate Limit ExceededFactoryBeanError: User Rate Limit ExceededObjectFactoryCreatingFactoryBeanError: User Rate Limit Exceeded bogdan.mustiata
Error: User Rate Limit Exceededstackoverflow.com/a/10358248/1385087
Error: User Rate Limit ExceededProviderError: User Rate Limit Exceeded bogdan.mustiata
Error: User Rate Limit Exceededstatic.springsource.org/spring-javaconfig/docs/1.0.0.M4/…
Error: User Rate Limit Exceeded bogdan.mustiata

Похожие вопросы