laravel容器是什么时候绑定服务提供者里面register的服务的

一直对服务提供者的原理也不会很明白了,今天特意去找了一下laravel在那里绑定服务提供者所提供的服务。

首先我们都知道laravel是单入口框架。那么一切的开始都是从index.php开始的。

 

index.php

好多小伙伴就不理解了,为什么要在处理请求的时候才开始绑定配置中的服务提供者提供的服务呢。这里我猜测是为了,减轻框架的开支,就比如说一个请求就不没有通过路由器,那就没有必要去加载很多的服务,直接返回就可以了,这样,优化了框架的开支。

不信的小伙伴可以继续往下看。

我们进入生成$app的文件看一下

 

bootstrap/app.php

很明显我们的框架只是加载了基本的三个服务。

用来处理错误的服务。

任务调度的服务。

处理http  请求的服务。

 

那我们在配置文件里面配置的服务提供者的服务是在那里绑定的呢?

我们开始去看index.php里面的这句话。

$response = $kernel->handle(

    $request = Illuminate\Http\Request::capture()

);

寓意很简单,就是开始处理请求,并生成返回。

那么我们看一下http服务这个kernel里面的handle()方法。

Http/Kernel.php里面只是一些配置的中间件,没有什么可说的,那么我们进去这个类的父类。

 

\Illuminate\Foundation\Http\Kernel

 

注意这里的$bootstrappers的数组里面的\Illuminate\Foundation\Bootstrap\RegisterProviders::class,

元素,我们一会要提到他。

还是继续上面的handle()方法。

 

handle()方法

那我们看上图标红框的方法

 

sendRequestThroughRouter()方法

看!这里有一个bootstrap()方法。

继续跟。

 

bootstrap()方法

这里的bootstrapWith()方法里面的参数就是拿的我们这个数组

 

$bootstrappers

$this->app->bootstrapWith($this->bootstrappers());

这里的$this->app就是全局服务容器嘛,所以就去看\Illuminate\Foundation\Application这个文件喽。

 

bootstrapWith()方法

所以我们看到了这里我们会把

\Illuminate\Foundation\Bootstrap\RegisterProviders::class,这个服务解释出来,那么就去看这个文件喽

 

bootstrap

那就继续看registerConfiguredProviders()

 

registerConfiguredProviders()方法

好了,我们终于看到了app.providers这个字符串了



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值