Guice के इंजेक्टर से एनोटेट उदाहरण कैसे प्राप्त करें?


88

मान लीजिए कि मेरे पास एक मॉड्यूल है:

Module extends AbstractModule
{
  @Override
  protected void configure()
  {
    bind(String.class).
      annotatedWith(Names.named("annotation")).
        toInstance("DELIRIOUS");
  }
}

और मैं मॉड्यूल का परीक्षण करना चाहता हूं और जांचता हूं कि क्या यह एक वर्ग और एक क्षेत्र के बिना Stringएनोटेट किए गए फ़ील्ड में सही मान इंजेक्ट करता है Names.named("annotation")लेकिन इंजेक्टर से सीधे मूल्य प्राप्त करता है:

@Test
public void test()
{
  Injector injector = Guice.createInjector(new Module());

  // THIS IS NOT GOING TO WORK!
  String delirious = injector.getInstance(String.class); 

  assertThat(delirious, IsEqual.equalTo("DELIRIOUS");
}

जवाबों:



15

मैं निम्नलिखित विधि का उपयोग कर रहा हूँ

public <T> T getInstance(Class<T> type, Class<? extends Annotation> option) {
    final Key<T> key = Key.get(type, option);
    return injector.getInstance(key);
}

इसके लिए। सामान्य तौर पर, आपको अभी भी एनोटेशन इंस्टेंस बनाने की समस्या है, लेकिन यहां Names.named("annotation")काम करता है।


4
मुझे लगता है कि यह बताता है कि मूल समाधान विशेष रूप से नामित विनिर्देश के लिए है। यदि आपके पास एक एनोटेशन (विशिष्ट इंटरफ़ेस @Annotation) है जिसे आपने बनाया है, तो आप कॉल को गेटमैथ के रूप में विशिष्ट बनाते हैं: इंजेक्टर.गेट इनस्टेंस (Key.get (DesiredObject.class, Annotation.class));
बोनसमगलर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.