exports explicitly whitelists a provider for use by modules that import it — explicit coupling with full traceability. @Global() makes exported providers universally available without importing — reduces boilerplate but hides dependencies. Use @Global() only for truly cross-cutting infrastructure registered once in the root module.
exports — explicit; consuming modules must import the module to use its providers.
@Global() — implicit; providers available everywhere without any import statement.
exports is the default and preferred approach for maintainability and testability.
@Global() is best reserved for app-wide infrastructure: config, logging, database connections.
@Global() modules should be registered exactly once, in the root AppModule.