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

2024-03-22 15:36

本文主要是介绍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

这篇关于laravel(源码笔记)服务提供者执行过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/835583

相关文章

Python实现网格交易策略的过程

《Python实现网格交易策略的过程》本文讲解Python网格交易策略,利用ccxt获取加密货币数据及backtrader回测,通过设定网格节点,低买高卖获利,适合震荡行情,下面跟我一起看看我们的第一... 网格交易是一种经典的量化交易策略,其核心思想是在价格上下预设多个“网格”,当价格触发特定网格时执行买

python设置环境变量路径实现过程

《python设置环境变量路径实现过程》本文介绍设置Python路径的多种方法:临时设置(Windows用`set`,Linux/macOS用`export`)、永久设置(系统属性或shell配置文件... 目录设置python路径的方法临时设置环境变量(适用于当前会话)永久设置环境变量(Windows系统

python运用requests模拟浏览器发送请求过程

《python运用requests模拟浏览器发送请求过程》模拟浏览器请求可选用requests处理静态内容,selenium应对动态页面,playwright支持高级自动化,设置代理和超时参数,根据需... 目录使用requests库模拟浏览器请求使用selenium自动化浏览器操作使用playwright

Mysql中设计数据表的过程解析

《Mysql中设计数据表的过程解析》数据库约束通过NOTNULL、UNIQUE、DEFAULT、主键和外键等规则保障数据完整性,自动校验数据,减少人工错误,提升数据一致性和业务逻辑严谨性,本文介绍My... 目录1.引言2.NOT NULL——制定某列不可以存储NULL值2.UNIQUE——保证某一列的每一

解密SQL查询语句执行的过程

《解密SQL查询语句执行的过程》文章讲解了SQL语句的执行流程,涵盖解析、优化、执行三个核心阶段,并介绍执行计划查看方法EXPLAIN,同时提出性能优化技巧如合理使用索引、避免SELECT*、JOIN... 目录1. SQL语句的基本结构2. SQL语句的执行过程3. SQL语句的执行计划4. 常见的性能优

linux下shell脚本启动jar包实现过程

《linux下shell脚本启动jar包实现过程》确保APP_NAME和LOG_FILE位于目录内,首次启动前需手动创建log文件夹,否则报错,此为个人经验,供参考,欢迎支持脚本之家... 目录linux下shell脚本启动jar包样例1样例2总结linux下shell脚本启动jar包样例1#!/bin

Spring Bean初始化及@PostConstruc执行顺序示例详解

《SpringBean初始化及@PostConstruc执行顺序示例详解》本文给大家介绍SpringBean初始化及@PostConstruc执行顺序,本文通过实例代码给大家介绍的非常详细,对大家的... 目录1. Bean初始化执行顺序2. 成员变量初始化顺序2.1 普通Java类(非Spring环境)(

Spring Boot 中的默认异常处理机制及执行流程

《SpringBoot中的默认异常处理机制及执行流程》SpringBoot内置BasicErrorController,自动处理异常并生成HTML/JSON响应,支持自定义错误路径、配置及扩展,如... 目录Spring Boot 异常处理机制详解默认错误页面功能自动异常转换机制错误属性配置选项默认错误处理

如何在Java Spring实现异步执行(详细篇)

《如何在JavaSpring实现异步执行(详细篇)》Spring框架通过@Async、Executor等实现异步执行,提升系统性能与响应速度,支持自定义线程池管理并发,本文给大家介绍如何在Sprin... 目录前言1. 使用 @Async 实现异步执行1.1 启用异步执行支持1.2 创建异步方法1.3 调用

java内存泄漏排查过程及解决

《java内存泄漏排查过程及解决》公司某服务内存持续增长,疑似内存泄漏,未触发OOM,排查方法包括检查JVM配置、分析GC执行状态、导出堆内存快照并用IDEAProfiler工具定位大对象及代码... 目录内存泄漏内存问题排查1.查看JVM内存配置2.分析gc是否正常执行3.导出 dump 各种工具分析4.