laravel5.5源码阅读草稿——application

构建方法传入整个项目根目录路径(public文件夹上一级)将其设为基础路径(存在本类basePath属性中)。

__construct > setBasePath > bindPathsInContainer 在容器中绑定路径

bindPathsInContainer > instance 在容器中注册已有实例

{

$this->removeAbstractAlias($abstract);这个方法先删除了容器中的对应实例别名

(abstractAliases与aliases有区别,存疑)

$this->rebound 然后如果该键名在bindings属性instances属性aliases属性中任意一个存在,

则运行之前注册该实例时绑定的回调函数进行更新

$this->instances[$abstract] = $instance 最后将路径添加至instances属性

}

__construct > registerBaseBindings

{

static::setInstance($this)将application实例注册至Container抽象基类使其全局可用

将Illuminate\Container\Container绑定为application类

绑定了PackageManifest类,vendor路径与bootstrap/cache/packages.php里的服务提供者路径

}

__construct > registerBaseServiceProviders 注册了event、日志、路由的服务提供者

传入相应的provider实例,并调用其register方法,将application实例传入provider作为参数进行回调。

RoutingServiceProvider在实例化的时候,又注册了router、urlGenerator、redirector、request、response、dispatcher等类的实例。

将已注册的provider进行标记$this->serviceProviders、$this->loadedProviders[get_class($provider)]

最后追踪到container类的bind方法,也只是把回调函数加入了bindings属性,并设置了是否共享而已

$app->singleton

__construct > registerCoreContainerAliases 将核心类路径存入$this->aliases(别名为键,类名为值)与$this->abstractAliases(类名为键,路径组成的数组为值)中,保存别名

原文地址:https://www.cnblogs.com/wyycc/p/9601947.html

时间: 2024-11-14 13:09:21

laravel5.5源码阅读草稿——application的相关文章

laravel5.5源码阅读草稿——入口

laravel的启动需要通过路由.中间件.控制器.模型.视图最后出现在浏览器.而路由.中间件.模型,这些功能都有自己的类,比如Route::any().DB::table().$this->middleware()等等,这些功能都是由一个叫IOC(服务容器)的对象来调配的. 它就像框架里的一个管家,我们需要某些功能的时候不需要去自己new.去考虑运行这A对象还需要把哪些对象传入A对象里才能运行了.laravel的index入口文件只管制造一个ioc实例,然后把request对象传入其中. ioc

Flume-NG源码阅读之SourceRunner,及选择器selector和拦截器interceptor的执行

在AbstractConfigurationProvider类中loadSources方法会将所有的source进行封装成SourceRunner放到了Map<String, SourceRunner> sourceRunnerMap之中.相关代码如下: 1 Map<String, String> selectorConfig = context.getSubProperties( 2 BasicConfigurationConstants.CONFIG_SOURCE_CHANNE

【原】AFNetworking源码阅读(四)

[原]AFNetworking源码阅读(四) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇还遗留了很多问题,包括AFURLSessionManagerTaskDelegate类所实现的NSURLSession相关的代理方法,甚至连dataTask.uploadTask.downloadTask这几个基本概念也没说.这一篇就是为了集中消灭这些遗留问题. 2. AFURLSessionManagerTaskDelegate的代理方法 此处实现的仍然是NSURLS

CI框架源码阅读笔记1 - 环境准备、基本术语和框架流程

最开始使用CI框架的时候,就打算写一个CI源码阅读的笔记系列,可惜虎头蛇尾,一直没有行动.最近项目少,总算是有了一些时间去写一些东西.于是准备将之前的一些笔记和经验记录下来,一方面权作备忘,另一方面时刻提醒自己:借鉴和学习才有出路,忘记过去意味着背叛! 基本术语说明 在本文开始之前,有必要对文中反复出现的术语做一个简单的说明,如果你对这一部分已经熟谙,完全可以略过.本文中反复出现和提及的术语包括: 前端控制器(Front Controller): 用于集中控制用户的所有请求的组件,将用户的请求发

seajs源码阅读

乘着周日有点时间,阅读一下玉伯大神的源码. seajs的源码写得真的很好,很是佩服,工整美观不愧是大神,造福百姓. 说起seajs不得不说,AMD和CMD的区别.  CMD 推崇依赖就近,AMD 推崇依赖前置. 事实上我对他们的区别没啥兴趣.关键是requirejs没明显的BUG,seajs明显没BUG. 两者最大区别请看这里:http://www.cnblogs.com/gyjWEB/p/4543945.html 好了,扯正题. 可以先看看别人写的源码解析:https://segmentfau

CI框架源码阅读笔记8 控制器Controller.php

最近时间有些紧,源码阅读系列更新有些慢.鉴于Controller中代码比较少,本次Blog先更新该文件的源码分析. 在经过路由分发之后,实际的应用Controller接管用户的所有请求,并负责与用户数据的交互.CI中所有的应用控制器都应该是CI_Controller的子类(除非你扩展了CI的核心,那么你的Controller父类可以是MY_Controller). 在应用程序控制器中,我们经常会用到这样的代码: /* 加载配置文件 */ $this->load->config("co

CI框架源码阅读笔记2 一切的入口 index.php

上一节(CI框架源码阅读笔记1 - 环境准备.基本术语和框架流程)中,我们提到了CI框架的基本流程,这里这次贴出流程图,以备参考: 作为CI框架的入口文件,源码阅读,自然由此开始.在源码阅读的过程中,我们并不会逐行进行解释,而只解释核心的功能和实现. 1.       设置应用程序环境 define('ENVIRONMENT', 'development'); 这里的development可以是任何你喜欢的环境名称(比如dev,再如test),相对应的,你要在下面的switch case代码块中

The Open Web Interface for .NET (OWIN) 源码阅读

katana开源许久,网上仍未搜索到对其源码的阅读总结,本人在工作中正好遇到数据处理流程框架设计,想来跟服务器处理request和response差不多,遂起了阅读katana源码,并借鉴其设计的想法,磕磕碰碰,困难重重,所幸有一些收获,与大家交流交流. katana源码 https://katanaproject.codeplex.com/ owin官网 http://owin.org/ 两个最重要的数据结构 1 Environment IDictionary<string, object>

commons-io源码阅读心得

FileCleanTracker: 开启一个守护线程在后台默默的删除文件. 1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ow