2017-02-12 5 views
0

Теперь я читаю официальный документ Guice, и я увидел этот код.Значение аннотации привязок с помощью методов провайдера

@Provides @PayPal 
    CreditCardProcessor providePayPalCreditCardProcessor(
     @Named("PayPal API key") String apiKey) { 
    PayPalCreditCardProcessor processor = new PayPalCreditCardProcessor(); 
    processor.setApiKey(apiKey); 
    return processor; 
    } 

В коде выше, что это @PayPal значит? На странице документа я понимаю смысл оригинальных аннотаций привязки. Мы можем настроить его. Но это так.

@Inject 
    public RealBillingService(@PayPal CreditCardProcessor processor, 
     TransactionLog transactionLog) 

В коде, @PayPal означает этот параметр processor должен быть введен экземпляр, указанный в аннотации. Итак, что именно это означает в первом коде?

ответ

0

Подумайте об аннотации как части возвращаемого типа метода. Используемый вами метод @Provides не просто предоставляет CreditCardProcessor, он предоставляет @PayPal CreditCardProcessor. Таким образом, метод написан @Provides @PayPal CreditCardProcessor.

Вы можете запросить @PayPal CreditCardProcessor как в вашем втором использовании, при комментировании параметра в -annotated методы или конструктора @Inject, или путем добавления аннотаций к @Inject -annotated поля. (Вы также можете запросить его непосредственно из экземпляра Injector, создав Key.)

1

В первом коде это означает «когда вы найдете CreditCardProcessor, аннотированный @Paypal, используйте этот метод как поставщик».

В частности, первый из которых используется для определить связывания, второй используется для запроса связывание.

Первый, можно переписать, как правило, в методе configure():

protected void configure() { 
    PayPalCreditCardProcessor processor = new PayPalCreditCardProcessor(); 
    processor.setApiKey(apiKey); 
    bind(CreditCardProcessor.class).annotatedWith(PayPal.class).toInstance(processor); 
} 

... Но вы на самом деле не может, потому что тогда вы бы синглтона. Никогда не было написано, что вам нужен синглтон.

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

Смежные вопросы