[特殊字符] Spring IOC/DI 核心知识点 CSDN 风格总结

一、Spring 核心概述

表格

核心特性 说明
定位 轻量级 JavaEE 全栈开发框架,简化企业级应用开发
核心优势 1. IOC:控制反转,解耦对象创建;2. AOP:面向切面,统一处理通用逻辑;3. 生态整合:无缝对接 MyBatis、Redis 等框架
二、IOC(控制反转):解决对象耦合问题
1. 核心概念
  • 耦合 :传统开发中 Service 硬编码 new Dao(),修改 Dao 需改动 Service,耦合度高;
  • IOC 本质:将对象创建权从开发者(正转)交给 Spring 容器(反转),容器统一管理对象生命周期;
  • 实现思路
    • 手动工厂模式:通过 properties 配置类路径 → 反射创建对象 → 存入 Map 供调用;
    • Spring 容器:通过 applicationContext.xml 配置 <bean>,容器启动时自动反射创建对象并缓存。
2. Spring IOC 快速上手(XML 版)

xml

复制代码
<!-- 核心配置:IOC 容器创建对象 -->
<bean id="userDao" class="com.hg.dao.UserDaoImpl"></bean>
<bean id="userService" class="com.hg.service.UserServiceImpl"></bean>

java

运行

复制代码
// 从容器获取对象
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService = ac.getBean("userService", UserService.class);
三、DI(依赖注入):给对象赋值解依赖

表格

javascript 复制代码
| 注入方式             | 核心要求               | 配置语法                                                                                                                                                                                                                              | 关键说明                                                                                      |
| :--------------- | :----------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------- |
| **构造方法注入**       | 类中提供对应构造方法         | `xml<br><bean id="userService" class="com.hg.service.UserServiceImpl"><br>    <constructor-arg name="形参名" ref="userDao"/>  <!-- 注入对象 --><br>    <constructor-arg index="1" value="字符串值"/>  <!-- 注入基本类型 --><br></bean><br>`        | 1. `name` 匹配构造方法形参名;<br>2. `index` 按参数列表索引(从 0 开始);<br>3. `ref` 引用容器内 Bean,`value` 赋值基本类型 |
| **Set 方法注入(推荐)** | 类中提供 `setXxx()` 方法 | `xml<br><bean id="userService" class="com.hg.service.UserServiceImpl"><br>    <property name="userDao" ref="userDao"/>  <!-- 对应 setUserDao() --><br>    <property name="msg" value="字符串值"/>  <!-- 对应 setMsg() --><br></bean><br>` | 1. `name` = set 方法去掉 `set` 后首字母小写;<br>2. 容错率高,新手优先使用                                      |
| **自动注入**         | 类中提供 set 方法        | `xml<br><bean id="userService" class="com.hg.service.UserServiceImpl" autowire="byType"/><br>`                                                                                                                                    | 1. `byType`:按类型匹配容器内 Bean 自动注入;<br>2. 需保证同类型 Bean 唯一,否则报错                                 |

|---|---|---|---|
| | | | |

四、核心避坑指南
  1. IOC 常见问题
    • <bean>class 必须写全类名,且为实现类(不能是接口);
    • 获取 Bean 时 id 需与配置一致,否则报 NoSuchBeanDefinitionException
  2. DI 常见问题
    • 构造注入:参数数量 / 类型 / 顺序需与构造方法完全匹配,否则报 Could not resolve matching constructor
    • Set 注入:name 拼写 / 大小写错误,导致 setXxx() 无法被调用,最终对象为 null;
    • 自动注入:同类型多个 Bean 时需改用 byName(按 id 匹配)。
五、实战核心思想
  1. 解耦:IOC 让对象创建与使用分离,DI 让对象依赖由容器自动赋值,彻底摆脱硬编码;
  2. 简化开发:开发者只需关注业务逻辑,对象创建、依赖管理全部交给 Spring 容器;
  3. 灵活扩展:修改配置文件即可替换实现类,无需改动业务代码。

总结

  1. Spring 核心是 IOC(容器管理对象)+ DI(自动注入依赖),核心目标是解耦;
  2. 注入方式优先级:Set 注入(新手首选)> 自动注入 > 构造方法注入;
  3. 配置核心规则:<bean> 定义对象,property/constructor-arg 完成赋值,ref/value 区分对象 / 基本类型。
相关推荐
小码哥_常6 小时前
Spring Boot 牵手Spring AI,玩转DeepSeek大模型
后端
0xDevNull6 小时前
Java反射机制深度解析:从原理到实战
java·开发语言·后端
华洛6 小时前
我用AI做了一个48秒的真人精品漫剧,不难也不贵
前端·javascript·后端
华科易迅6 小时前
MybatisPlus增删改查操作
android·java·数据库
AugustRed6 小时前
基于现有的 Controller 接口 API 暴露 MCP
spring·mcp
WZTTMoon6 小时前
Spring Boot 中Servlet、Filter、Listener 四种注册方式全解析
spring boot·后端·servlet
standovon6 小时前
Spring Boot整合Redisson的两种方式
java·spring boot·后端
Cosolar7 小时前
LlamaIndex RAG 本地部署+API服务,快速搭建一个知识库检索助手
后端·openai·ai编程
IAUTOMOBILE7 小时前
Python 流程控制与函数定义:从调试现场到工程实践
java·前端·python
hutengyi7 小时前
PostgreSQL版本选择
java