首页 > 其他分享 >IoC容器

IoC容器

时间:2023-10-03 13:44:45浏览次数:32  
标签:容器 依赖 private IoC teacher 注入

前言

IoC容器是Spring框架的核心组成部分之一。它是一个负责对象创建、组装和管理的容器,通过控制对象的创建和依赖关系的注入,实现了对象之间的解耦和灵活性。

在传统的编程模型中,对象的创建和控制权通常由开发者负责,开发者需要手动实例化对象、处理对象之间的依赖关系并进行组装,这样的过程非常繁琐且容易出错。

而在IoC容器中,开发者只需要通过配置或注解告诉容器需要创建的对象以及对象之间的依赖关系,容器会负责实例化对象、处理依赖注入,并管理对象的生命周期。这样,开发者只需专注于业务逻辑的编写,而将对象的创建和管理交给IoC容器处理。

Spring框架提供了多种实现IoC容器的方式,最常用的是基于XML和基于注解的配置方式。通过在配置文件或代码中描述Bean的定义、依赖关系和作用域等信息,Spring容器会在应用程序启动时读取配置并将对应的对象实例化和组装起来。在开发中,一般都用注解的方式来实现IoC容器。

什么是IoC容器

IoC容器是Spring框架的核心,通过实现IoC(控制反转)和DI(依赖注入),以降低类与类之间的依赖程度(降低耦合度)。

IoC(控制反转)

控制反转就是应用本身不负责依赖对象的创建和维护,依赖对象的创建和维护是由外部容器负责的。这样控制权就由应用本身转移到了外部容器,控制权的转移就是所谓的反转(降低了业务对象之间的依赖程度,降低耦合度)。

DI(依赖注入)

依赖注入是对象之间的依赖关系是运行时动态注入的(本质是利用Java的反射机制)。

依赖注入的几种方式

  • 构造器注入
  • 方法注入
  • 接口注入

注意:Spring中只支持构造器注入和方法注入。

属性注入

属性注入是直接在属性上面加上@Resource注解或者@Autowired注解。

@Component //等价于 <bean id="student" class="bean.Student" /> Bean的默认id是类名的小字母小写,即student
public class Student {
    @Value("张三")
    private String name;
    @Value("9527")
    private int id;
//    @Resource
    @Autowired  //默认采用byType方式,如果byType失效,则采用byName方式,如果byName失效则抛出异常
    private Teacher teacher;

方法注入

 方法注入是直接在setter方法加上@Autowired注解。

@Component //等价于 <bean id="student" class="bean.Student" /> Bean的默认id是类名的小字母小写,即student
public class Student {
    @Value("张三")
    private String name;
    @Value("9527")
    private int id;
    
    private Teacher teacher;
    
    @Autowired //自动装配Bean(依赖注入的方法注入)
    public void setTeacher(Teacher teacher) {
        this.teacher = teacher;
    }
}

 构造器注入

当两个类属于强关联时,我们可以通过构造器的方式来实现依赖注入。

@Component //等价于 <bean id="student" class="bean.Student" /> Bean的默认id是类名的小字母小写,即student
public class Student {
    @Value("张三")
    private String name;
    @Value("9527")
    private int id;
    
    private Teacher teacher;

    @Autowired //自动装配Bean(依赖注入的构造器注入)
    public Student(Teacher teacher) {
        this.teacher = teacher;
    }
}

总结

IoC容器是Spring框架的核心特征,通过它可以实现对象的创建、依赖注入和生命周期管理,帮助开发者更加高效地开发和管理应用程序。使用用IoC容器可以降低代码之间的耦合度、方便进行单元测试和模拟对象、提升代码的可维护性和扩展性。

标签:容器,依赖,private,IoC,teacher,注入
From: https://www.cnblogs.com/one-xiaoqiang/p/17741056.html

相关文章

  • 基于hash_table对STL unordered系列容器的封装 #C++
    概述本文对hash_table进行封装,以模仿SGISTL对unordered系列容器进行简单实现,旨在加深对C++封装与泛型技法的体会与理解。阅读本文之前,建议先对哈希表进行学习。unordered_map与map一样,unordered_map的所有元素类型都是pair,pair的第一个成员为Key,第二个成员为Value。因为Key在任何......
  • SpringIOC
    ......
  • IoC容器趣谈
    今天我们来谈谈Spring的内核之一——IoC容器大家可能会有这样的疑问:”这玩意为啥要叫容器呢?好奇怪“”容器不是装东西的吗?难道IoC容器也是用来装什么东西的?“有上述两个想法的小伙伴,我觉得你们是非常聪明的,并且平时有思考的习惯。别着急,让我们慢慢往下看IoC容器的两大重要概......
  • springIoC
    IoC(控制反转):应用程序的依赖对象不自己创建和维护,交由统一的外部容器来创建和维护。这样控制权就由应用转移到外部容器。DI(依赖注入):通过IoC容器动态的向某个对象提供他需要的其他对象。 1..IoC容器的四种创建方式:ClassPathXmlApplicationContext:从项目的根目录下加载配置文件......
  • C++ STL标准容器的特点和典型的使用场景
    概念和作用C++标准模板库(StandardTemplateLibrary,STL)提供了一组通用的模板类和函数,用于处理常见的数据结构和算法。STL中的标准容器是其中的重要组成部分,它们提供了不同的数据结构和操作方式,适用于各种不同的使用场景。说白了,就是每一种容器代表一种特定的数据结构。我们在学C......
  • 颠覆性的Spring IOC
    一、什么是SpringIOC?SpringIOC(InversionofControl,控制反转)是Spring框架的核心概念之一,也是Spring框架实现轻量级和解耦的关键。IOC的基本思想是将对象的创建、依赖关系的管理、对象的生命周期等任务交给容器来完成,而不是由开发者手动管理。在传统的程序开发中,对象的创建和......
  • Python笔记:基本数据结构(容器)的优化
    列表的性能问题队列的弹出问题利用Python的原生语法很难写出一个真正完全能达到\(O(1)\)的队列,究其原因是由于insert方法的时间复杂度问题:classqueue: def__init__(self,q): self.q=[] defpopright(self): self.q.pop() defappendleft(self,elem): self.q.ins......
  • 16. Docker容器监控CAdvisor+InfluxDB+Granfana
    目录1、前言2、原始命令3、CAdvisor+InfluxDB+Granfana3.1、什么是CAdvisor3.2、什么是Influxdb3.3、什么是Granfana4、安装使用4.1、安装influxdb4.2、安装CAdvisor4.3、安装Granfana4.4、访问Influxdb4.5、创建CAdvisor数据库4.6、访问CAdvisor4.7、Grafana配置1、前言容器监控方......
  • HarmonyOS非线性容器特性及使用场景
     非线性容器实现能快速查找的数据结构,其底层通过hash或者红黑树实现,包括HashMap、HashSet、TreeMap、TreeSet、LightWeightMap、LightWeightSet、PlainArray七种。非线性容器中的key及value的类型均满足ECMA标准。HashMapHashMap可用来存储具有关联关系的key-value键值对集......
  • Dockerfile 语法详解:构建定制化容器镜像的基石
    Docker已经成为现代应用程序开发和部署的关键工具之一。在Docker的世界中,Dockerfile是一个至关重要的文件,它定义了如何构建容器镜像的步骤和配置。本文将深入探讨Dockerfile的语法,为您提供构建定制化容器镜像的基础知识。Dockerfile的基本结构Dockerfile是一个纯文本文件,其......