001package io.avaje.inject.spi;
002
003import io.avaje.inject.BeanScopeBuilder;
004import javax.inject.Provider;
005
006import java.lang.reflect.Type;
007
008/**
009 * A Plugin that can be applied when creating a bean scope.
010 * <p>
011 * Typically, a plugin might provide a default dependency via {@link BeanScopeBuilder#provideDefault(Type, Provider)}.
012 */
013public interface Plugin {
014
015  /**
016   * Return the classes that the plugin provides.
017   */
018  Class<?>[] provides();
019
020  /**
021   * Apply the plugin to the scope builder.
022   */
023  void apply(BeanScopeBuilder builder);
024}