laravel(源码笔记)服务绑定和解析(依赖注入-反射,控制反转)

  • 依赖注入:解决对象之间的互相依赖关系,通过反射实现。
  • 控制反转:让外部来定义具体行为
  1. 反射(基本使用)
  • reflectionClass
    • getConstructor()
    • getParameters()
    • getConstants()
    • getProperties()
    • getMethods()
    • newInstanceArgs()
  • laravel依赖注入:通过反射获取构造器的参数,循环获取参数的名
    • 是否有依赖
      • 有依赖
        • 判断参数是否可选,可选则,获取可选参数的默认值进行解析。
        • 不可选则,通过注册 provider 注册闭包到控制反转容器(IOC)中,返回类的实例,最后通过make来解析对象
      • 没有依赖
        • 直接make解析类的对象
  1. 服务容器-控制反转
  • instance 已存在的对象(new过)
  • bind
    • 绑定自身 null
    • 绑定闭包 closure
      • new
      • 需要依赖注入的类
    • 接口和实现
  • singleton 单例
  • alias 给类设置别名,调用时$this->app->make('alias')
  • 服务解析过程:
    • make的实现原理
      • 获取别名,通过别名获取真实类名,
      • 通过instance方式绑定的,在实例中则返回,不存在则获取真实实例进行build返回。
      • 是否可build
        • 可以被build的
          • build后返回
        • 不可以被build的
          • 把实例放入make迭代,比如是接口方式,则需要把接口的实现放进去再执行一次make来build接口的实现类
      • 循环额外的拓展
      • 是否是共享池里面的,不是的话,放进去。下次直接可获取到。
      • 通知类被解析的闭包,执行闭包回调
      • 设置该类已经被解析。
    • build 的实现原理
      • 闭包,直接执行返回
      • 通过反射来对实现类进行反向工程
      • 不能被实例化抛出错误
      • 设置实例进入构造堆栈中
      • 获取构造函数
      • 构造函数为空,直接实例类返回,构造堆栈出栈
      • 获取构造函数依赖,生成构造函数依赖键值对作为参数执行获取依赖实例。
        • 获取依赖
        • 循环查找
          • 是否已经在参数中
            • 不存在
              • 是否有依赖,没有则入栈依赖数组
              • 有依赖,解析依赖对象,从新调用make,直至解决所有依赖。最后返回依赖,入栈到依赖数组中。(重点)
            • 存在,直接入栈到依赖数组
      • 构造堆栈出栈
      • 返回参数的实例
  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue是一种流行的前端框架,它提供了双向数据绑定功能,这种绑定使得应用程序的数据和界面之间的交互更加简单,同时减少了手动更新DOM的需求。在Vue中,双向数据绑定的实现源码是非常重要的。 当我们使用双向数据绑定时,Vue会监听指定属性的变化,并且在属性发生变化时更新DOM。Vue使用Object.defineProperty()方法来检测属性的变化,当属性发生变化时,Vue会触发一个回调函数,这个回调函数会负责更新DOM。 在Vue中,双向数据绑定的实现源码是非常简洁而优雅的。当我们定义一个属性并在模板中使用时,Vue会自动创建一个Watcher对象,这个Watcher对象会在属性的值发生变化时被调用。当Watcher被调用时,Vue会执行一系列的操作,包括计算属性的值、调用指令函数等。 Vue的双向数据绑定还需要考虑到性能的问题。为了确保Vue应用程序的性能表现,Vue限制了双向绑定的次数。当一个Watcher对象被调用时,Vue会检测Watcher是否已经调用过一次,如果是,则忽略进一步的更新操作。这种限制保证了Vue应用程序的性能表现,但同时也保证了数据的正确性。 总之,Vue的双向数据绑定源码解析非常重要,它涵盖了Vue应用程序中最重要的功能之一。Vue的双向数据绑定源码简单而优雅,同时还需要考虑到性能的问题,这使得Vue在应用程序中具有非常高的性能表现和数据的正确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值