依赖注入的作用是让框架帮你处理重要对象的生命周期的管理,不需要你显式地进行管理(对象构造和销毁)。这样能够让开发人员能够专注于应用的业务部分。
Angular的injector子系统负责创建组件,解析依赖,并将其按需提供给其他组件。每个Angular应用都有一个injector。Angular在应用的启动阶段(bootstrap, 见AngularJS启动过程)会创建一个injector。
injector针对每个可注入组件只创建一个实例(调用injector.instantiate方法),创建之后会将其缓存,以备后续访问。如图:
模块中定义了各种应用需要的服务,注意模块只是定义了服务,而并没有真正地创建它们,创建的只是一个等待注入器来执行的任务。真正的创建是通过注入器来完成的,当模块被加载到注入器的时候,注入器就会知道被加载的模块中定义了哪些任务,从而介入到这个创建相应服务的任务中来。另外,AngularJS全面实现了延迟初始化,也就是说,当这个对象没有被别人需要的时候,它是不会被创建的,对性能提高有一定帮助,加快了AngularJS启动速度。
前边也说了,被注入的对象是单例对象,创建一次就可以被到处使用,使用的是同一对象,例如,你想在多个Controller中使用同一数据或逻辑,可以创建Service、Value、Constant等,注入到多个Controller中,它们是共享同一个服务对象。
可用于依赖注入的组件:
1、value
2、factory
3、service
4、provider
5、constant
注入点:
1、模块中定义的directive,factory,filter,provider,controller,animation、decorator。
2、模块中的config函数,run函数。