IOC的目标是解耦、屏蔽对象的实现细节; Spring 控制反转的理解:
- Spring 框架管理Bean的创建工作,即由原来的用户管理Bean 转变为框架管理Bean,这个过程叫做控制反转(Invertion of control)
- Spring 框架托管创建的Bean放在哪里了? 放在了Ioc Container中,即所谓的Ioc 容器
- Spring 框架为了更好让用户配置Bean,必然会引入不同方式类配置Bean? 这便是xml配置,Java配置,注解配置等配置方式
- Spring 框架既然接管了Bean的生成,必然需要管理整个Bean的生命周期
- 应用程序代码从Ioc Container中获取依赖的Bean,注入到应用程序中,这个过程叫做依赖注入(Dependency Injection ,DI);所以说控制反转是通过依赖注入实现的,其实它们是同一个概念的不同角度描述。通俗的说就是Ioc是设计思想,DI是实现方式
- 在依赖注入时,有哪些方式? 这就是构造器方式,@Autowired,@Resource,@Qulifier 同时Bean之间存在依赖(可能存在先后顺序问题,以及循环依赖问题等)
- 控制反转(Inversion of control,IOC)
- 使用对象容器反过来控制应用程序所需要的外部资源的一种程序开发思想
- 面相对象编程中的一种设计原则,是一种设计思想
- 依赖注入(Dependency Injection,DI)
- 实现控制反转最常用的方式
- 依赖注入是一种具体的实现方法,容器创建好实力后再注入调用者称为依赖注入
- NetCore内置的IOC的三种生命周期
- Transient:瞬时生命周期,Transient服务的每次被请求时,都会被创建一个新的对象。这种生命周期比较适合用于轻量级的无状态服务
- Scoped:Scoped生命周期的服务是每次Web请求被创建,局部单例对象,在某个句库内是用一个对象(作用域单例,本质是容器单例);一次请求内是一个单例对象,多次请求则多个不同的单例对象;
- Singleton:Singleton生命周期服务在第一次被请求时创建,在后续的每个请求都会使用同一个实例。如果你的应用需要单例服务,推荐的做法是交给服务容器来负责单例的创建和生命周期管理,而不是自己来走这些事情。