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   * True when the component has been imported.
027   */
028  boolean importedComponent() default false;
029
030  /**
031   * The bean factory method (for <code>@Bean</code> annotated methods).
032   */
033  String method() default "";
034
035  /**
036   * The aspect this component provides.
037   */
038  String providesAspect() default "";
039
040  /**
041   * The interfaces the bean implements.
042   */
043  String[] provides() default {};
044
045  /**
046   * The list of dependencies this bean requires.
047   */
048  String[] dependsOn() default {};
049
050  /**
051   * Type deemed to be reasonable to provide to external module.
052   * <p>
053   * Used to support multiple module wiring automatically (as alternative to using explicit InjectModule annotation).
054   */
055  String autoProvides() default "";
056
057}