首页 > 其他分享 >什么是控制反转

什么是控制反转

时间:2023-05-10 16:45:03浏览次数:62  
标签:控制 生命周期 反转 什么 Bean 依赖 单例 Spring

IOC的目标是解耦、屏蔽对象的实现细节;   Spring 控制反转的理解:

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

标签:控制,生命周期,反转,什么,Bean,依赖,单例,Spring
From: https://www.cnblogs.com/pangzili/p/17388414.html

相关文章

  • 自建CA和公共CA有什么不同?
    据统计,全球有数百个公共CA,通常它们是按国家地区进行划分的。这类CA受大众的广泛认可和使用,也被称为公共信任的证书颁发机构。但是由于一些大型企业拥有许多站点,为了更轻松高效的管理以及考虑到维护成本,适合企业内部使用的自建CA显然成为了更好的选择。那么自建CA与公共CA究竟有什......
  • windows使用/服务(12)Tomcat控制台中文乱码
    参考:https://blog.csdn.net/zhaoxny/article/details/799263331、找到${CATALINA_HOME}/conf/logging.properties2、添加语句:java.util.logging.ConsoleHandler.encoding=GBK3、重启tomcat,查看日志数据即可!......
  • TCP拥塞控制
    TCP有自己的拥塞控制机制。它的特点是缓慢启动,然后是拥塞避免阶段。动态由窗口大小(未确认的未确认数据包的数量)决定。Flow开始缓慢。发送方在每次收到确认(ACK)消息时将窗口大小增加1。它有效地使下一个路由行程时间(RTT)中的数据包速率加倍。此过程一直持续到发生数据包丢失......
  • 永磁同步电机的控制算法仿真模型: 1. 永磁同步电机的MRAS无传感器矢量
    永磁同步电机的控制算法仿真模型:1.永磁同步电机的MRAS无传感器矢量控制:2.永磁同步电机的SMO无传感器矢量控制(反正切+锁相环);3.永磁同步电机DTC直接转矩控制;4.永磁同步电机的有传感器矢量控制;5.永磁同步电机的位置控制YID:92128687292912454......
  • 异步电机有速度传感器矢量控制算法的C代码+仿真模型,仿真采用C代码直接在Simulink模型
    异步电机有速度传感器矢量控制算法的C代码+仿真模型,仿真采用C代码直接在Simulink模型里进行仿真的方式,当你不具备硬件调试的条件时,可以通过这种方法直接对代码进行仿真验证,所见即所得!采用双闭环解耦控制算法,转速外环电流内环,转矩与励磁解耦控制,SVPWM空间电压矢量调制,电流谐波很小,......
  • text-davinci-003和ChatGPT是什么关系呢?
     先看下GPT的发展时间线InstructGPT(2022年1月)是一系列GPT-3模型(包括text-davinci-001、text-davinci-002和text-davinci-003)统称,于GPT-3相比,它的最大不同是针对人类指令(reinforcementlearningwithhumanfeedback,RLHF)进行了微调;InstructGPT产生的幻觉更少......
  • 以太网通信控制板-关于MODBUS, IEEE754浮点数, 字节和位的转换
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/CH579_DTU_PBX/index1.html"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p> MODBU......
  • LeetCode 541. 反转字符串 II
    题目链接:LeetCode541.反转字符串II题意:给定一个字符串s和一个整数k,从字符串开头算起,每计数至2k个字符,就反转这2k字符中的前k个字符。如果剩余字符少于k个,则将剩余字符全部反转。如果剩余字符小于2k但大于或等于k个,则反转前k个字符,其余字符保持原样。......
  • Python程序执行的流程控制(选择和循环)
    选择结构单分支if条件:语句块(注意要打冒号冒号冒号,用缩进代替大括号的功能)双分支if条件:语句块1else:语句块2多分支if条件1:语句块1elif条件2:语句块2……else:语句块n若有多个条件都满足,只执行第一个被满足条件......
  • LeetCode 344. 反转字符串
    题目链接:LeetCode344.反转字符串题意:输入一个字符串,将其在原地进行反转。解题思路:对于字符串,我们定义两个指针(也可以说是索引下标),一个从字符串前面,一个从字符串后面,两个指针同时向中间移动,并交换元素。完整代码如下:funcreverseString(s[]byte){//原地反转字符......