spring ioc

2023-09-20 10:21:05

1.什么是Spring
Spring 框架是一个分层的、面向切面的 Java 应用程序的一站式轻量级解决方案,它是 Spring 技术栈的核心和基础,是为了解决企业级应用开发的复杂性而创建的。

> 简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。介于SpringMVC与Mybatis之间的中间层框架,作用:承上启下,相当于粘合剂

2.核心概念:
1)IOC:Inverse of Control 的简写,译为“控制反转”,指把创建对象过程交给 Spring 进行管理。

2)AOP:Aspect Oriented Programming 的简写,译为“面向切面编程”。  AOP 用来封装多个类的公共行为,将那些与业务无关,却为业务模块所共同调用的逻辑封装起来,减少系统的重复代码,降低模块间的耦合度。另外,AOP 还解决一些系统层面上的问题,比如日志、事务、权限等。

3.核心架构
1)**Spring Core**:提供依赖注入和Bean管理功能,主要组件是 `BeanFactory`,它使用控制反转模式将应用程序配置和依赖规范与实际的应用代码分开;

2)**Spring Context**:扩展了`BeanFactory`的概念,增加了对国际化、事件传播,以及验证等的支持,此外还提供了许多企业服务及对模版框架集成的支持;

3)**Spring Web**:建立于Context模块之上,提供了一个适合于Web应用的上下文。另外,这个模块还提供了一些面向服务支持,也提供了Spring和其它Web框架的集成;

4)**Spring Web MVC**:是一个全功能的构建 Web 应用程序的 MVC 实现,容纳了大量视图技术,如 JSP、Velocity、POI等;

5)**Spring AOP**:为Spring容器管理的对象提供了对面向切面编程的支持;

6)**Spring DAO**:该层封装了对数据库的访问,并且处理了其抛出的错误消息,同时还基于AOP模块提供了事务管理;

7)**Spring ORM**(Object Relational Mapping):Spring支持多种ORM框架(Mybatis、Hibernate),简化了数据库操作。

4.什么是控制反转(IOC)
在传统的 Java 应用中,一个类想要调用另一个类中的属性或方法,通常会先在其代码中通过 new Object() 的方式将后者的对象创建出来,然后才能实现属性或方法的调用。为了方便理解和描述,我们可以将前者称为“调用者”,将后者称为“被调用者”。也就是说,调用者掌握着被调用者对象创建的控制权。
IoC 带来的最大改变不是代码层面的,而是从思想层面上发生了**主从换位**的改变。原本调用者是主动的一方,它想要使用什么资源就会主动出击,自己创建;但在 Spring 应用中,IoC 容器掌握着主动权,调用者则变成了被动的一方,被动的等待 IoC 容器创建它所需要的对象(Bean)。
这个过程在职责层面发生了控制权的反转,把原本调用者通过代码实现的对象的创建,反转给 IoC 容器来帮忙实现,因此我们将这个过程称为 Spring 的“控制反转”。

5.依赖注入(DI)
在面向对象中,对象和对象之间是存在一种叫做“依赖”的关系。简单来说,依赖关系就是在一个对象中需要用到另外一个对象,即对象中存在一个属性,该属性是另外一个类的对象。
控制反转核心思想就是由 Spring 负责对象的创建。在对象创建过程中,Spring 会自动根据依赖关系,将它依赖的对象注入到当前对象中,这就是所谓的“依赖注入”。

> 即由Spring IOC容器动态的将某种依赖关系注入到组件之中

更多推荐

Spring中@Component和@Bean的区别

前言Spring是一个流行的Java开发框架,它提供了一种简化应用程序开发的方式。在Spring中,@Component和@Bean是两个常用的注解,用于定义和管理对象的创建和依赖注入。虽然它们都用于创建和管理对象,但有一些关键区别。@Component注解@Component是Spring框架的核心注解之一,它用于标

DevOps:从历史到实践的全面解析

在当今的软件开发领域,DevOps已经成为了一个耳熟能详的词汇。从历史发展的角度来看,DevOps源自敏捷开发和云计算的兴起,是软件开发和运维的必然趋势。本文将详细介绍DevOps的历史发展、相关技术以及实践案例,最后对DevOps的意义和未来发展趋势进行总结。一、DevOps的历史发展DevOps作为一项运动,起源于

Json-Jackson和FastJson

狂神:测试Jackson纯Java解决日期格式化设置ObjectMapperFastJson:知乎:Jackson使用指南1、常见配置方式一:yml配置spring.jackson.date-format指定日期格式,比如yyyy-MM-ddHH:mm:ss,或者具体的格式化类的全限定名spring.jackson.t

从「思想实验」中学习,自监督 AI 模型向科学家看齐

年初ChatGPT爆火,美国《时代周刊》发文揭露其背后的「血汗工厂」,给「AIGC领头羊」耀眼的光环蒙上了一层巨大阴影。据报道,为训练ChatGPT识别有害内容,一群来自肯尼亚、乌干达和印度的外包员工负责给数据库手动标注,他们每天花费9小时鉴别各种攻击性词汇,每小时至多标注2万个单词,收获是1.32-2美元的时薪以及持

基于LiDAR的对象检测中的课程化对象操作

论文标题:CurricularObjectManipulationinLiDAR-basedObjectDetection代码:https://github.com/ZZY816/COM导读本文探讨了LiDAR传感器在自动驾驶等安全关键应用中的3D物体检测任务,并引入了一种创新的训练框架,被称为"curricularo

Qt(day3)

思维导图小练习second.h#ifndefSECOND_H#defineSECOND_H#include<QWidget>#include<QLabel>#include<QLineEdit>#include<QPushButton>#include<QTimerEvent>#include<QTime>#inclu

U盘提示格式化怎么办?3个方法轻松解决!

“我的u盘已经很久没用了,今天刚把u盘插入电脑就显示需要进行格式化。但是我还有很多重要的文件都保存在里面呢。这可怎么办呀?有什么方法恢复里面的数据吗?”u盘是我们日常生活中常用的移动存储设备之一,但有时可能会遇到一个让人烦恼的问题,那就是当插入U盘时,系统可能会弹出“u盘提示格式化”字样。这种情况可能导致数据丢失,因此

软件测试的方法总结

根据利用的被测对象信息的不同,可以将软件测试方法分为:黑盒测试、灰盒测试、白盒测试。1、白盒测试1)概念:是依据被测软件分析程序内部构造,并根据内部构造分析用例,来对内部控制流程进行测试,可完全不顾程序的整体功能实现情况,即已知软件产品的内部实现过程,可以通过测试证明每种内部操作是否符合设计规格的要求,所有内部成分是否

常用设计模式总结

策略模式定义算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。观察者模式在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象就会收到通知,并自动更新。观察者定义了对象之间一对多的关系主题(也就是可观察者)用一个共同的接口来更新观察者观察者与可观察者之间用松耦合方式结

Scala 高阶:Scala中的模式匹配

一、概述Scala中的模式匹配(case)类似于Java中的switch...case,但是Scala的模式匹配功能更为强大。通过模式匹配,可以匹配更复杂的条件和数据结构,包括常量、类型、集合、元组等。而Java的switch语句只能用于匹配整型或枚举类型。二、基本语法Javapublicstaticvoidmain(

详解ESP32模块的引脚分配图和定义

最近在研究单片机,买了一块ESP32开发板,记录一下所有引脚的定义。ESP32的优势之一是它的GPIO比ESP8266多得多。您不必兼顾或多复用IO。有几件事要注意,因此请仔细查看引脚分配图。ESP32外围设备和I/O尽管ESP32总共有48个GPIO引脚,但其中只有25个引出到开发板两侧的插头。这些引脚可以分配给各种

热文推荐