001package io.avaje.inject.spi;
002
003/**
004 * A Module that can be included in BeanScope.
005 */
006public interface Module {
007
008  /**
009   * Return the types this module needs to be provided externally or via other modules.
010   */
011  Class<?>[] requires();
012
013  /**
014   * Return the set of types this module explicitly provides to other modules.
015   */
016  Class<?>[] provides();
017
018  /**
019   * Build all the beans.
020   */
021  void build(Builder builder);
022
023  /**
024   * Marker for custom scoped modules.
025   */
026  interface Custom extends Module {
027
028  }
029}