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