001package io.avaje.inject.spi;
002
003import java.lang.annotation.ElementType;
004import java.lang.annotation.Retention;
005import java.lang.annotation.RetentionPolicy;
006import java.lang.annotation.Target;
007
008/**
009 * Hold bean dependency metadata intended for internal use by code generation (Java annotation processing).
010 */
011@Target(ElementType.METHOD)
012@Retention(RetentionPolicy.CLASS)
013public @interface DependencyMeta {
014
015  /**
016   * The bean type.
017   */
018  String type();
019
020  /**
021   * The qualified name of the dependency being provided.
022   */
023  String name() default "";
024
025  /**
026   * The bean factory method (for <code>@Bean</code> annotated methods).
027   */
028  String method() default "";
029
030  /**
031   * The interfaces the bean implements.
032   */
033  String[] provides() default {};
034
035  /**
036   * The list of dependencies.
037   */
038  String[] dependsOn() default {};
039
040  /**
041   * Type deemed to be reasonable to provide to external module.
042   * <p>
043   * Used to support multiple module wiring automatically (as alternative to using explicit InjectModule annotation).
044   */
045  String autoProvides() default "";
046
047}