provides pom how java dependency-injection annotations guice

java - pom - Guice: Anotaciones vinculantes con atributos



guice provides (1)

Guice averigua lo que desea inyectar utilizando una Key , que es solo un nombre para la combinación de una anotación de enlace (una anotación que se anota con @BindingAnnotation o @Qualifier ) y un tipo (con parámetros si es necesario). Estas son todas claves válidas, distintas entre sí:

  • YourClassOne
  • YourClassTwo
  • List<Integer>
  • List<String>
  • @Paypal YourClassOne
  • @Paypal YourClassTwo
  • @YourBindingAnnotation YourClassOne
  • @YourBindingAnnotation List<String>

Sin embargo, las anotaciones tienen permitido tener atributos, como con @Named("your name here") . Esto significa que las claves no solo difieren en qué anotación de enlace tiene, sino cuáles son sus atributos. Agreguemos algunas claves usando anotaciones con atributos a la lista de arriba:

  • @Named("foo") YourClassOne
  • @Named("bar") YourClassOne
  • @AnotherBindingAnnotation(foo=3, bar=5) YourClassOne
  • @AnotherBindingAnnotation(foo=6, bar=1) YourClassOne

Todos son diferentes el uno del otro, y todos son elementos válidos para Guice e inyectar a Guice.

En general, probablemente no necesite crear sus propias anotaciones de enlace con atributos: las anotaciones de enlace no son tan comunes en primer lugar, y la mayoría de los casos en los que desee pueden manejarse con anotaciones de enlace (sin atributos) vacíos o uso. de la anotación incorporada @Named (junto con su contraparte, Names.named , que le ayuda a crear una instancia compatible de su anotación que puede usar en su AbstractModule). Sin embargo, si DESEA crear su propia anotación de enlace con atributos, puede usar la parte de los documentos que citó para crear eso, especialmente al cumplir con los requisitos Annotation.equals y Annotation.hashCode . (Si esto es algo que esperas hacer mucho, considera usar una biblioteca como Apache Commons AnnotationUtils o un generador de código como la autoanotación de Google Auto ).

Ahora estoy leyendo el documento oficial de Guice, pero tengo algunas preguntas relacionadas con el capítulo de Anotación de enlace.

Esto explica "Anotación con atributos". Pero, no estoy seguro de la explicación.

Anotaciones vinculantes con atributos

Guice admite anotaciones vinculantes que tienen valores de atributo. En el caso raro de que necesite una anotación de este tipo:

Crea la interfaz @ de anotación. Crea una clase que implemente la interfaz de anotación. Siga las instrucciones para equals () y hashCode () especificados en el Annotation Javadoc. Pase una instancia de esto a la cláusula de enlace annotatedWith ().

No entiendo esa explicación. ¿Para qué sirve la explicación? Aprendí dos anotaciones, como @Paypal (en este documento) y @name. Pero quizás no podamos lograr solo con estas dos anotaciones cuando quiero usar algunas dependencias más de dos para una misma clase. Ahora estoy confundido, ¿alguien podría explicar?