初识Spring、SpringIOC

news2024/9/20 8:05:39

Spring 

一、什么是Spring框架?(重要) ---对Spring的理解

记忆关键字:1.核心思想(IOC、AOP) 2.作用(解耦、简化) 3.简单描述框架组成

答:定义:Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架)。

核心思想:核心是IOC(控制反转)和 AOP(面向切面编程)

作用:用于组件之间的解耦,以及简化第三方JavaEE中间技术的使用(JMS、任务调度、缓存、ORM框架)。

框架组成:IOC容器、Validation数据校验、AOP面向切面编程、Transactions事务管理、Spring JDBC、Spring MVC框架、以及各类第三方JavaEE中间件技术集成。

二、Spring框架由哪些模块组成?(重要)

记忆关键字:官方文档描述,由7个模块组成

答:Spring Framework 根据官方文档的描述,主要包括以下常用5个模块

1.Core:核心模块

        包括:IOC  Container(loc容器),Events(事件通知机制)、Resources(资源加载机制)、i18n(国际化)、Validation(数据校验)、Data Binding(数据绑定)、Type Conversion(类型转换),SpEL(Spring表达式)、AOP(面向切面编程)
2.Testing:测试模块
        包括:Mock 0biects(测试模拟对象),TestContext Framework(测试框架),Spring MVCTest(用于测试Spring Mvc),webTestclient(用于测试 Webclient、Restful、 webflux 等);
3.Data Access:数据访问模块

        包括:Transactions(事务管理),DA0support(统一的 Data Access 0bject DA0 模式封装),JDBc(Spring对于DC的操作封装),0/RMapping(Spring 对于对象关系映射框架的封装,例如 Hibernate等框架)等;
4.Web Servlet:基于Servlet的Web应用开发
        包括:Spring MVc( Spring 基于 MVC 模式设计封装的 Web框架),Websocket(Spring集成 Websocket,websocket 是一个服务器与客户端双向通信的技术)等;
5.Integration:企业级系统集成模块(不同系统之间的交互集成)
        包括:Remoting(spring 用于在分布式系统中进行远程服务调用的通讯框架),IMS(Spring集成各类Java消息中间件、Java消息服务[JavaMessage Service]、例如ActiveMQ等),Java Emai1(邮件发送),Tasks Scheduling(任务调度);

三、Spring环境搭建

(1)坐标 (2)配置文件

例:配置MySQL

  <!--坐标-->
    <dependencies>
        <dependency>
            <!--mysql-->
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.28</version>
        </dependency>
    </dependencies>
<!--配置文件-->
msg1=com.mysql.cj.jdbc.Driver
msg2=jdbc:mysql://localhost:3306/myschool?serverTimezone=GMT
msg3=root
msg4=123456

SpringIOC

一、什么是Spring IOC?(重要)  ---对Spring IOC的理解

记忆关键字:IOC名词解释,作用是解耦,使用IOC容器管理项目组件之间的耦合关系。

IOC(Inversion of Control,中文释义:控制反转),是Spring框架的核心思想之一,主要用于解耦。

IOC是指将创建对象的控制权转移给Spring框架进行管理,由Spring框架根据配置文件或注解等方式,创建bean对象并管理各个bean对象之间的依赖关系。使对象之间形成松耦合的关系,实现解耦。

控制:指的是对象的创建(实例化、管理)的权利

反转:控制权交给外部环境(Spring框架、IOC容器)

二、 Spring IOC容器的理解(重要

记忆关键字:IOC容器的作用、存储形式、初始化过程

1.I0C 通常被理解为I0C Container 容器,I0C 容器其实就是一个 Map,key 是每个 bean 对象的ID,value 是bean 对象本身。IOC 容器负责创建 bean 对象并管理 bean 的生命周期并且根据配置好配置文件注解,管理 I0C 容器中的每个 bean ,以及根据 bean 之间的依赖关系,完成 bean 之间的注入。
2.IOC 容器属于 Spring core 模块,用来创建管理 Bean ,默认使用单例的方式将 bean 存储在DefaultListableBeanFactory 类的 beanDefinitionMap中(-个 ConcurrentHashMap 类型的Map集合);
3.IOC 容器使用 ConcurrentHashMap 集合存储了 BeanDefinition 对象,该对象封装了 Spring对一个 Bean 所有配置信息,包括: 类名,属性,构造方法参数,依赖,是否延迟加载,是否是单例等配置信息;

三、Spring IOC实现步骤(重要

(1)找到需要以解耦方式获取实例对象的类

(2)将需要spring管理的类注入spring容器

         <bean id = "唯一标识" class="类"></bean>

(3)向spring容器中索取java实例(解耦)

  • 加载spring核心配置文件,获取spring容器对象

ApplicationContext applicationContext=new ClassPathXmlApplicationContext("beans.xml");

  • 获取对象

Student student = (Student)applicationContext.getBean("student")

 例:

(1)找到需要以解耦方式获取实例对象的类-----Student类、Date类、IUserDaoImpl实体类

Student 类 

package com.apesource.pojo;

public class Student {
}

IUserDaoImpl 类 

package com.apesource.dao;

public class IUserDaoImpl implements IUserDao {
    @Override
    public void save() {
        System.out.println("======dao新增方法======");
    }
}

Date无需手动定义,Java.util.Date

(2)将需要spring管理的类注入spring容器 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

        <!-- 注入类-->
    <bean id="student" class="com.apesource.pojo.Student"></bean>
        <!-- 注入类-->
    <bean id="dao" class="com.apesource.dao.IUserDaoImpl"></bean>

        <!-- 注入日期类-->
    <bean id="date" class="java.util.Date"></bean>


</beans>

 (3)向spring容器中索取java实例(解耦)

  • 加载spring核心配置文件,获取spring容器对象
  •  获取对象
public class Test01 {
    public static void main(String[] args) {
        //1.加载spring核心配置文件,获取spring容器对象
        BeanFactory applicationContext = new ClassPathXmlApplicationContext("beans.xml");
        //2.获取对象
        Student student = (Student) applicationContext.getBean("student");
        System.out.println(student);

        IUserDao dao= (IUserDao)applicationContext.getBean("dao");
        System.out.println(dao);
        dao.save();

        Date date = (Date)applicationContext.getBean("date");
        System.out.println(date);

    }
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1995761.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot中解决文件application.properties中文注释乱码的问题

如图看到中文注释乱码 很影响代码的阅读 原因是字符编码使用了ISO-8859-1 这里演示如何在idea里面把ISO-8859-1改为UTF-8 点击右上角设置 搜索框输入UTF-8 把默认的改成UTF-8就行了 可以看到中文注释正常显示 希望能够点点赞和收藏&#xff01;&#xff01;

猫咪浮毛大作战!希喂、安德迈宠物空气净化器PK,实测数据大公开

宠物空气净化器作为宠物领域的新产品&#xff0c;凭借自身独特的功能受到铲屎官们的喜爱&#xff0c;越来越多的商家关注到这个市场。然而&#xff0c;市面上品牌逐渐增多&#xff0c;质量却参差不齐&#xff0c;一些不良商家以次充好&#xff0c;容易让消费者陷入消费陷阱。因…

PHYS_OPT_MODIFIED

当对原始单元执行物理优化时&#xff0c;PHYS_OPT_MODIFIED 更新单元的属性以反映对单元执行的优化。什么时候&#xff1f; 对同一单元格执行多次优化&#xff0c;PHYS_OPT_MODIFIED值 包含按发生顺序排列的优化列表。 架构支持 所有架构。 适用对象 PHYS_OPT_MODIFIED属性放置…

Linux嵌入式学习——C++学习(2)

一、标识符的作用域和可见性 &#xff08;一&#xff09;作用域 1、全局作用域 在函数外部声明的变量和函数具有全局作用域。这些变量和函数在程序的任何地方都可以被访问。 2.局部作用域 在函数内部、循环体内部或条件语句内部声明的变量具有局部作用域。这些变量只能在其…

<数据集>航拍屋顶识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;3516张 标注数量(xml文件个数)&#xff1a;3516 标注数量(txt文件个数)&#xff1a;3516 标注类别数&#xff1a;1 标注类别名称&#xff1a;[roof] 序号类别名称图片数框数1roof351643938 使用标注工具&#xf…

模具3D打印:成本缩减与产能提升的新引擎

近年来&#xff0c;3D打印技术&#xff0c;特别是在航空航天、汽车制造、生物医疗等前沿领域&#xff0c;已成为复杂结构件研发与生产的关键技术。针对广大制造企业而言&#xff0c;评估金属3D打印技术的经济效能&#xff0c;即其能否有效助力企业成本控制与产能提升&#xff0…

魔众文库系统v7.0.0版本推荐店铺功能,管理菜单逻辑优化

推荐店铺功能&#xff0c;管理菜单逻辑优化 [新功能] RandomImageProvider 逻辑升级重构&#xff0c;支持更丰富的随机图片生成 [新功能] 资源篮订单参数字段 [新功能] 首页推荐店铺功能&#xff0c;需要在后台 文库系统 → 文库店铺 开启推荐 [系统优化] Grid 快捷编辑请求…

Yolo-World初步使用

Yolo v8目前已经支持Yolo-World&#xff0c;整理一下初步使用步骤。 使用步骤 1 先下载Yolo-World的pt文件&#xff0c;下载地址&#xff1a;GitHub - AILab-CVC/YOLO-World: [CVPR 2024] Real-Time Open-Vocabulary Object Detection 官网应该是点这里&#xff08;有个笑脸…

C++入门:C语言到C++的过渡

前言&#xff1a;C——为弥补C缺陷而生的语言 C起源于 1979 年&#xff0c;当时 Bjarne Stroustrup 在贝尔实验室工作&#xff0c;面对复杂软件开发任务&#xff0c;他感到 C 语言在表达能力、可维护性和可扩展性方面存在不足。 1983 年&#xff0c;Bjarne Stroustrup 在 C 语言…

大数据应用型产品设计方法及行业案例介绍(可编辑110页PPT)

引言&#xff1a;随着信息技术的飞速发展&#xff0c;大数据已成为推动各行各业创新与变革的重要力量。大数据应用型产品&#xff0c;作为连接海量数据与实际应用需求的桥梁&#xff0c;其设计方法不仅要求深入理解数据特性&#xff0c;还需精准把握用户需求&#xff0c;以实现…

git:安装 / 设置环境变量 / 使用

一、下载 https://github.com/git-for-windows/git/releases/download/v2.45.1.windows.1/Git-2.45.1-64-bit.exe 下载成功-双击打开 下一步-Next 二、添加环境变量 1、找到git安装地址 win r cmd 回车 where git 设置环境变量 C:\Program Files\Git\cmd\git.exe 此电…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 最大括号深度(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是 春秋招笔试突围 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-D卷的三语言AC题解 💻 ACM金牌🏅️团队| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,…

分布式事务学习整理

一、整体背景 最近在分布式事务领域这块的了解比较少&#xff0c;对自己来说是一个业务盲点&#xff0c;所以想抽空学习以及整理下关于分布式事务的相关知识。 1、分布式事务的发展 总所周知&#xff0c;我们为什么要考虑分布式事务&#xff0c;从一开始发展来说&#xff0c…

vscode源代码管理的传入传出更改视图如何关闭

传入传出更改视图关闭&#xff1a; vscode源代码管理中下面显示的大量传入传出记录&#xff0c;不想显示的话 在设置里搜索 scm.showHistoryGraph 可以关闭。

[Meachines] [Easy] valentine SSL心脏滴血+SSH-RSA解密+trp00f自动化权限提升+Tmux进程劫持权限提升

信息收集 IP AddressOpening Ports10.10.10.79TCP:22,80,443 $ nmap 10.10.10.79 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 5.9p1 Debian 5ubuntu1.10 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 1024 96:4c:51:42:…

以树莓集团的视角:探索AI技术如何重塑数字媒体产业发展

在科技日新月异的今天&#xff0c;AI技术如同一股不可阻挡的潮流&#xff0c;正深刻改变着我们的世界&#xff0c;尤其是数字媒体产业发展。作为数字产业生态链的杰出建设者&#xff0c;树莓集团始终站在时代前沿&#xff0c;积极探索AI技术如何为数字媒体产业注入新活力。 在树…

(ICCV-2023)使用 Transformer 的可扩展扩散模型

使用 Transformer 的可扩展扩散模型 Paper Title:Scalable Diffusion Models with Transformers Paper是UC Berkeley发表在ICCV 2023的工作 paper地址 code地址 图 1&#xff1a;具有 transformer 主干的扩散模型实现了最先进的图像质量。我们展示了在 ImageNet 上以 512$\time…

初学51单片机1602液晶时序图实例分析

上篇博文笔者分享了关于液晶1602基本的工作流程&#xff0c;本篇主要是通过逻辑分析仪来看一下程序使能的电平时序&#xff0c;是否符合产品文档给出 的时序逻辑。 先看一下1602的时序图 认识下时序图中各个标识的含义&#xff1a; Tc信号周期&#xff08;E Cycle Time&#x…

WEB应用(十六)---反序列化

反序列化的概念 在面向对象编程语言中&#xff0c;就是将对象转化为字节流&#xff0c;这一步是序列化&#xff0c;字节流中包括这个对象的数据和信息&#xff0c;便于传输和存储&#xff0c;是可以在网络中传输的。需要时&#xff0c;通过反序列化从字节流中恢复对象。 类似于…

State-Threads初识

1.项目简介 协程&#xff08;coroutine&#xff09;不是进程或线程&#xff0c;其执行过程更类似于子例程&#xff0c;或者说不带返回值的函数调用。 一个程序可以包含多个协程&#xff0c;可以对比与一个进程包含多个线程。 我们知道多个线程相对独立&#xff0c;有自己的上下…