当前位置: 首页 > news >正文

Spring环境搭建、SpringIOC容器基础、SpringDI基础

文章目录

  • Spring环境搭建、SpringIOC容器基础、SpringDI基础
    • 一、SpringIOC核心思想
    • 二、搭建Spring环境步骤
    • 三、SpringIOC容器使用步骤
    • 四、SpringIOC 总结
    • 五、SpringDI(依赖注入)
    • 1、基本概念
      • 2、实现方式
        • (1)set 注入
        • (2)构造注入
        • (3)属性注入
      • 3、允许注入的数据类型
      • 4、注入的实现方式

Spring环境搭建、SpringIOC容器基础、SpringDI基础

一、SpringIOC核心思想

  • IOC控制反转
  • DI依赖注入

作用:将所有JavaBean注入Spring容器中,进行==”解耦“==管理,在Spring中,万物皆为JavaBean

二、搭建Spring环境步骤

  1. 使用maven,在pom.xml文件中添加Spring坐标,即添加Spring依赖
  2. 在resource文件中新建配置文件,即Spring框架的主配置文件
  3. Spring的主配置文件就相当于 SpringIOC 容器 ,其中管理这所有的 JavaBean

三、SpringIOC容器使用步骤

  1. 创建 JavaBean ,即类或其他数据
  2. 将类注入SpringIOC容器,即将创建的 JavaBean 设置到IOC容器中
// 配置语法:<bean id="唯一标识" class="类的完全限定名称,就是需要将哪个类加到IOC容器中"></bean>

3、加载 Spring 主配置文件(SpringIOC容器)获取核心对象

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

说明:

关键字:
BeanFactory(父接口)

ApplicationContext(子接口)

  • ClassPathXmlApplicationContext == 通过文件的相对路径获取核心对象(实现类)
  • FileSystemXmlApplicationContext == 通过文件的绝对路径获取核心对象(实现类)
  • AnnotationConfigApplicationContext == 通过加载配置类获取核心对象(实现类)

4、让 Spring 以解耦的方式实例化对象并返回用户

四、SpringIOC 总结

  • 使用 SpringIOC 的主要思想就是为了解耦合,就是管理项目组件之间的耦合关系
  • IOC 的含义就是控制反转,即将创建对象的控制权转移给 Spring框架进行管理,反转的含义就是,原本创建对象的权利应该是属于具体的类,而现在创建对象的权利交给了IOC容器

五、SpringDI(依赖注入)

1、基本概念

根本目的也是为了解耦合

就是通过依赖注入,将传递的值或对象,通过 SpringDI 注入到指定位置

2、实现方式

先思考需要使用哪种注入方式更加合适

(1)set 注入

通过 set 方法维护对象之间的依赖关系

在 bean 标签内部开始配置

  1. 配置位置:此位置

  2. 配置语法:使用****标签

  3. 配置属性:

    • name -------->属性名称 (set 方法中对应的参数名称)

    • value -------->属性值

    • ref -------->属性值的引用(也就是需要关联的哪个对象

<bean id="student" class="com.apesource.pojo.Student"><property name="stuname" value="111"></property><property name="stuage" value="12"></property><property name="stuhobby" value="money"></property>
</bean>

(2)构造注入

通过构造方法维护对象之间的依赖关系

  1. 配置位置:此位置

  2. 配置语法:<constructor-arg 属性名=“属性值”>

  3. 配置属性:

    • name-------->构造方法参数名称

    • index-------->构造方法参数下标

    • type-------->构造方法参数类型

    • value-------->属性值

    • ref-------->属性值的引用(也就是需要关联的哪个对象

<bean id="student" class="com.apesource.pojo.Student"><constructor-arg name="name" value="111"></constructor-arg><constructor-arg name="age" value="21"></constructor-arg>
</bean>

(3)属性注入

(不推荐使用)

3、允许注入的数据类型

  • 注入对象
  • 注入基本数据类型以及String
  • 注入复杂类型List Set array Map propertoes

4、注入的实现方式

  • 下面用set注入演示复杂类型的注入
<!--  =============================注入复杂类型=====================================  -->
<bean id="teacher" class="com.apesource.pojo.Teacher"><property name="mylist"><list><value>11</value><value>22</value><value>33</value></list></property><property name="myset"><set><value>444</value><value>555</value><value>666</value></set></property><property name="mymap"><map><entry key="花和尚" value="鲁智深"></entry><entry key="豹子头" value="林冲"></entry><entry key="两年半" value="蔡徐坤"></entry><entry key="玉麒麟" value="卢俊义"></entry><entry key="及时雨" value="宋江"></entry></map></property><property name="myarray"><array><value>777</value><value>888</value><value>999</value></array></property><property name="prop"><props><prop key="1+1">2</prop><prop key="2+2">4</prop><prop key="4+4">8</prop></props></property></bean>

相关文章:

Spring环境搭建、SpringIOC容器基础、SpringDI基础

文章目录 Spring环境搭建、SpringIOC容器基础、SpringDI基础一、SpringIOC核心思想二、搭建Spring环境步骤三、SpringIOC容器使用步骤四、SpringIOC 总结五、SpringDI&#xff08;依赖注入&#xff09;1、基本概念2、实现方式&#xff08;1&#xff09;set 注入&#xff08;2&a…...

CentOS7.9手工配置静态网络流程

进入网卡配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33 配置 TYPE"Ethernet" PROXY_METHOD"none" BROWSER_ONLY"no" BOOTPROTO"static" //static 配置静态网络 DEFROUTE"yes" IPV4_FAILURE_FATAL"no…...

JVM面试题-1

1、什么是JVM内存结构&#xff1f; jvm将虚拟机分为5大区域&#xff0c;程序计数器、虚拟机栈、本地方法栈、java堆、方法区&#xff1b; 程序计数器&#xff1a;线程私有的&#xff0c;是一块很小的内存空间&#xff0c;作为当前线程的行号指示器&#xff0c;用于记录当前虚拟…...

漫谈红黑树:红黑树的奇妙演化

漫谈红黑树&#xff1a;红黑树的奇妙演化 一、红黑树的提出二、红黑树性质的简单推导三、结论 博主简介 &#x1f4a1;一个热爱分享高性能服务器后台开发知识的博主&#xff0c;目标是通过理论与代码实践的结合&#xff0c;让世界上看似难以掌握的技术变得易于理解与掌握。技能…...

docker启动rabbitmq,但是页面加载不出来问题解决

首先docker启动rabbitmq docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq -d 后台运行 -p 映射外部端口 -- name 取名&#xff08;方便管理&#xff09; 然后发现&#xff0c;成功启动rabbitmq&#xff0c;却加载不进去 因为你下载的是rabbitmq的latest…...

Qt项目报错:Cannot run compiler ‘clang++‘. /bin/sh: 1: clang++: not found

在一台旧电脑上装了深度系统&#xff0c;装了Qt&#xff0c;导入项目&#xff0c; build提示 clang找不到&#xff1a; Project ERROR: Cannot run compiler clang. Output: /bin/sh: 1: clang: not found Maybe you forgot to setup the environment? Error while parsing …...

奇舞周刊第503期:图解串一串 webpack 的历史和核心功能

记得点击文章末尾的“ 阅读原文 ”查看哟~ 下面先一起看下本期周刊 摘要 吧~ 奇舞推荐 ■ ■ ■ 图解串一串 webpack 的历史和核心功能 提到打包工具&#xff0c;可能你会首先想到 webpack。那没有 webpack 之前&#xff0c;都是怎么打包的呢&#xff1f;webpack 都有哪些功能&…...

6.redis面试题和坑

1.哨兵模式 多少个节点多少个哨兵(如果全部哨兵检测到已经master dead,重新选举)写sentinel.conf,监控的主机 票数 sentinel monitor myredis 127.0.0.1 6379 1启动哨兵 redis-sentinel sentinel.conf关闭主机 failover sdown info replication shutdown优点 1.基于主从复制模式…...

【ES6】—使用 const 声明

一、不属于顶层对象window 使用const关键字 声明的变量&#xff0c;不会挂载到window属性上 const a 5 console.log(a) console.log(window.a) // 5 // undefined二、不允许重复声明 使用const关键字不允许重复声明相同的变量 cosnt a 5 cosnt a 6 // Uncaught SyntaxEr…...

iOS开发 - Swift Codable协议实战:快速、简单、高效地完成JSON和Model转换!

前言 Codable 是 Swift 4.0 引入的一种协议&#xff0c;它是一个组合协议&#xff0c;由 Decodable 和 Encodable 两个协议组成。它的作用是将模型对象转换为 JSON 或者是其它的数据格式&#xff0c;也可以反过来将 JSON 数据转换为模型对象。 Encodable 和 Decodable 分别定…...

RabbitMq:Topic exchange(主题交换机)的理解和使用

RabbitMq:Topic exchange(主题交换机)的理解和使用 在RabbitMq中&#xff0c;生产者的消息都是通过交换机来接收&#xff0c;然后再从交换机分发到不同的队列中去&#xff0c;在分发的过程中交换机类型会影响分发的逻辑&#xff0c;下面主要讲解一下主题交换机。 ​ 主题交换…...

汽车级36V、4A同步降压转换器MAX20404AFOD/VY、MAX20404AFOC/VY、MAX20404AFOA/VY开关稳压器

MAX20404是小型同步降压转换器&#xff0c;集成了高端和低端开关。这些IC均设计为可在3V到36V的宽输入电压范围内提供高达4A的电流。电压质量可以通过观察PGOOD信号来监测。该器件可以在99%的占空比下运行&#xff0c;非常适合汽车和工业应用。 MAX20404提供可编程输出电压或5…...

C++------利用C++实现二叉搜索树【数据结构】

文章目录 二叉搜索树概念二叉搜索树的操作查找插入删除 二叉搜索树的应用 二叉搜索树 概念 什么是二叉搜索树&#xff0c;二叉搜索树就是指左孩子永远比根小右孩子永远比根大。这个规则适用于所有的子树。 上面的就是一棵二叉搜索树&#xff0c;我们还可以发现这棵树走一个中…...

HotSpot虚拟机之内存模型与线程安全

目录 一、线程内存模型 1. 内存模型 2. 内存模型操作 二、Happens-Before原则 三、Java线程 1. 线程实现方式 2. Java线程状态 四、Java线程安全 1. 线程安全程度 2. 锁优化 五、参考资料 一、线程内存模型 1. 内存模型 内存模型主要目的是定义共享变量的访问规则&…...

TiDB 多集群告警监控-中章-融合多集群 Grafana

作者&#xff1a; longzhuquan 原文来源&#xff1a; https://tidb.net/blog/ac730b0f 背景 随着公司XC改造步伐的前进&#xff0c;越来越多的业务选择 TiDB&#xff0c;由于各个业务之间需要物理隔离&#xff0c;避免不了的 TiDB 集群数量越来越多。虽然每套 TiDB 集群均有…...

【图像分类】基于卷积神经网络和主动学习的高光谱图像分类(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

notepad++ verilog关键字自动补全

新建verilog.xml放在安装目录下 D:\Program Files (x86)\Notepad\autoCompletion <?xml version"1.0" encoding"Windows-1252" ?> <NotepadPlus><AutoComplete><KeyWord name"accept_on" /><KeyWord name"a…...

C语言知识

C语言知识 链接 C语言中的数组初始化是有三种形式的&#xff0c;分别是&#xff1a; (1)数据类型 数组名称[长度n] {元素1,元素2…元素n}; (2)数据类型 数组名称[] {元素1,元素2…元素n}; (3)数据类型 数组名称[长度n]; 数组名称[0] 元素1; 数组名称[1] 元素2; 数组…...

数据结构基础

将节点构建成树 数据的结构逻辑结构集合线性结构树形结构图状结构 存储结构合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如…...

深度学习中数据处理相关的技巧

文章目录 提取隐蔽特征惰性加载数据集类别分布不均衡 提取隐蔽特征 在某些任务中&#xff0c;一些类别的特征可能相对较为罕见或难以捕捉。由于这些特征在数据集中出现的频率较低&#xff0c;模型可能无法充分学习它们&#xff0c;从而导致对这些类别的辨别能力较弱。为了解决…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...