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这个字符串了。

谢谢大家

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 先说几句废话,调和气氛。事情的起由来自客户需求频繁变更,伟大的师傅决定横刀立马的改革使用新的框架(created ...
    wsdadan阅读 3,120评论 0 12
  • 1. 服务提供者配置: 2. 服务提供者主要方法: 3. 注册服务提供者流程 3.1 注册流程的过程大概 3.1...
    AntFoot阅读 3,864评论 1 6
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,107评论 19 139
  • Laravel 学习交流 QQ 群:375462817 本文档前言Laravel 文档写的很好,只是新手看起来会有...
    Leonzai阅读 8,127评论 2 12
  • 好想,买一个太阳 去照亮妈妈的窗 融化,窗棱的霜花 尽管,尽管天如此灰暗 单薄,可是我去哪买一个 太阳,能让人安然...
    木鱼的眼_泪阅读 202评论 0 1