laravel(源码笔记)服务提供者执行过程

服务提供者

  1. 自定义服务,第三方资源,核心服务,通过服务提供者进行注册和引导。
  2. 基本
    1. register,绑定实例,注册到服务容器
    2. provides,导出provide实例
  3. 实例化app,解析处kernel对象,引导bootstrap(重点),kernel处理请求,进入中间件,最后返送请求给路由毒药的控制器方法
    1. 检查环境
    2. 加载应用配置
    3. 配置日志
    4. 注册异常处理回调
    5. 注册Facades
    6. 注册Providers
    7. 启动Providers
  4. providers
    1. $kernel->handle
    2. sendRequestThroughRouter
      1. bootstrap(v)
      2. send
      3. middleware 是否跳过
      4. dispatchToRouter
    3. bootstrapWith
    4. t h i s − > m a k e ( this->make( this−>make(bootstrapper)->bootstrap($this);
    5. RegisterProviders bootstrap
    6. Application registerConfiguredProviders
    7. getCachedServicesPath $this->bootstrapPath().'/cache/services.php' 生成服务文件
    8. ProviderRepository load
      1. loadManifest()会加载服务提供器缓存文件services.php
      2. shouldRecompile 缓存的service.php文件里面的providers和config.php/app.php内的providers不一致就会导致重新编译
      3. compileManifest
        1. freshManifest
        2. 创建provider实例
        3. 是否延迟加载
          1. 是,将实例作为键,提供者作为值存入缓存文件的deferred数组中。有事件则入栈到事件when数组中
          2. 否,直接入栈eager数组
        4. 将$manifest写入缓存文件
      4. 事件触发时注册延迟服务提供器 registerLoadEvents t h i s − > a p p − > m a k e ( ′ e v e n t s ′ ) − > l i s t e n ( this->app->make('events')->listen( this−>app−>make(′events′)−>listen(events, registerProviderActionClosure)
      5. 即时注册服务提供器 register
        1. 非强制,获取提供者返回(已经注册过)
        2. 字符串,解析提供者
        3. 对象,存在register方法,执行register
        4. 标记提供者已经注册,入栈服务提供者数组,设置该提供者已经注册完毕
        5. 是否需要引导,需要则启动引导,执行provider的boot
        6. 返回提供者
      6. 服务解析时注册延迟服务提供器 addDeferredServices
    9. app make 过程。
      1. 是否在 deferredServices,是则 loadDeferredProvider
        1. loadDeferredProvider 是否已经加载过,没有则注册
          1. registerDeferredProvider
            1. 删除 deferredServices 对应的provider
            2. 框架还未启动,放入等待启动的回调函数中,等待服务启动时调用。
    10. 启动application
      1. BootProviders
        1. 执行启动前hook
        2. bootProvider 执行boot
        3. 标记已经启动
        4. 执行启动后hook
相关推荐
PHP实战开发录2 小时前
MySQL连接数为什么会打满
系统架构·php·开发
VXbishe2 小时前
【课程设计】基于SpringBoot的乡村政务服务系统的设计与实现-计算机毕设77011
javascript·vue.js·spring boot·python·php·课程设计·政务
aixingpan3 小时前
aixingpan.cn API开发文档:api_docs_bichart_natalvssolar_return2接口指南
前端·php
曦夜日长4 小时前
Linux系统篇,进程概念(四):内核链表的深度理解、进程优先级的底层理解
linux·运维·服务器·php
4SAPI19 小时前
企业大模型API服务商推荐:从多模型接入到AI API Gateway的技术选型分析
人工智能·php
子非鱼a1 天前
【WEB】[NewStarCTF 2023 公开赛道]include 0。0
php
DevUp1 天前
停更老站往哪搬:PHP 老站的五条出路(番外七)
php·cms
专业程序开发源1 天前
springboot旅游推荐系统82074-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·php·课程设计·旅游
sbjdhjd1 天前
从“删除后重生”到认证绕过:PHP 常驻内存实验与 Cacti remote_agent 命令执行链路复盘
安全·web安全·网络安全·数据挖掘·php·网络攻击模型·安全架构
JaguarJack1 天前
PHP 8.6 只是个小版本,三十项弃用却已在为 PHP 9.0 铺路
后端·php·服务端