跳转到主要内容

什么是服务提供者

服务提供者是 Laravel 应用整体启动流程的核心。你自己的应用以及 Laravel 的所有核心服务,都是通过服务提供者进行启动的。 「启动(bootstrapping)」在这里意味着:注册服务容器的绑定、事件监听器、中间件、路由等各类内容。服务提供者是配置应用的中心位置。 Laravel 内部使用大量服务提供者来启动邮件、队列、缓存等核心服务。这些提供者中的许多是「延迟」提供者,只有真正需要其提供的服务时才会加载,而不是每次请求都加载。 用户自定义的服务提供者需要在 bootstrap/providers.php 文件中注册。
想更深入了解 Laravel 如何处理请求,请参阅请求生命周期文档。

编写服务提供者

所有服务提供者都继承自 Illuminate\Support\ServiceProvider。大多数服务提供者会同时包含 registerboot 方法。 要生成新的提供者,请使用 make:provider Artisan 命令。Laravel 会自动在 bootstrap/providers.php 中注册新的提供者。

register 方法

register 方法中,仅应向服务容器进行绑定注册。请勿在 register 中注册事件监听器、路由或其他功能——因为此时可能会错误地使用尚未加载的服务提供者所提供的服务。
服务提供者的方法内始终可以通过 $this->app 属性访问服务容器。

bindings 与 singletons 属性

若需要注册大量简单的绑定,除了逐条注册,还可以使用 bindingssingletons 属性。框架加载服务提供者时会自动检查这些属性并注册绑定。

boot 方法

如需在服务提供者中注册视图 Composer,请写在 boot 方法中。该方法会在其他所有服务提供者都注册完毕之后调用,因此可以访问框架已注册的所有服务。
请勿混淆 registerboot 方法的作用。register 仅用于注册绑定,boot 用于初始化服务和其他准备工作。

boot 方法中的依赖注入

boot 方法也可以通过类型提示注入依赖。服务容器会自动注入所需的依赖。

注册服务提供者

所有服务提供者都在 bootstrap/providers.php 文件中注册。该文件返回一个包含应用服务提供者类名的数组。
在 Laravel 13 中,不再使用 config/app.phpproviders 数组,而是通过 bootstrap/providers.php 注册服务提供者。make:provider 命令会自动添加。
运行 make:provider Artisan 命令时,Laravel 会自动在该文件里添加提供者。如果是手动创建的提供者类,请手动将其添加到数组中。

创建自定义服务提供者

下面演示实际编写一个自定义服务提供者。
1

生成提供者

使用 Artisan 命令生成服务提供者。
2

在 register 方法中绑定

在生成的提供者的 register 方法中编写绑定。
3

注册到 bootstrap/providers.php

使用 make:provider 时会自动注册。若为手动创建,请添加:

延迟提供者(Deferred Providers)

如果提供者只用于注册服务容器绑定,那么可以推迟该提供者的注册,直到真正需要绑定时才加载。通过延迟这类提供者的加载,就不会在每次请求时都从文件系统加载,从而提升性能。 要创建延迟提供者,请实现 \Illuminate\Contracts\Support\DeferrableProvider 接口并定义 provides 方法。provides 方法返回该提供者所注册的服务容器绑定。
延迟提供者适合那些只在特定功能中使用(而非全局)的服务。避免加载不必要的服务,可以进一步优化性能。

下一步

服务容器

详细了解服务容器机制与绑定。
最后修改于 2026年7月18日