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 set of types this module explicitly provides to other modules. 010 */ 011 Class<?>[] provides(); 012 013 /** 014 * Return the types this module needs to be provided externally or via other modules. 015 */ 016 Class<?>[] requires(); 017 018 /** 019 * Return the packages this module needs to be provided via other modules. 020 */ 021 Class<?>[] requiresPackages(); 022 023 /** 024 * Return public classes of the beans that would be registered by this module. 025 * <p> 026 * This method allows code to use reflection to inspect the modules classes 027 * before the module is wired. This method is not required for DI wiring. 028 */ 029 Class<?>[] classes(); 030 031 /** 032 * Build all the beans. 033 */ 034 void build(Builder builder); 035 036 /** 037 * Marker for custom scoped modules. 038 */ 039 interface Custom extends Module { 040 041 } 042}