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}