知识点:
1.通过指定构造器配置Bean
知识点 |
核心内容 |
重点 |
Spring IOC容器构造器配置 |
通过constructor-arg标签指定构造器参数,支持index、name、type三种匹配方式 |
无参构造器必须存在(默认调用),全参构造器需显式配置 |
参数匹配规则 |
index按参数位置(从0开始)、name按参数名、type按参数类型顺序匹配 |
相同类型顺序的构造器不可重复(Java语法限制) |
构造器初始化验证 |
通过输出日志验证构造器调用,如"构造器被调用" |
需注意参数赋值顺序与构造器声明一致 |
标签语法 |
<constructor-arg index="0" value="100"/> 或 <constructor-arg type="java.lang.String" value="白骨精"/> |
混合使用index/name/type时需确保逻辑唯一性 |
异常处理 |
未指定构造器时默认调用无参构造器,若不存在则报错 |
全参构造器需完整赋值,否则报错 |
2.通过p名称空间配置Bean
知识点 |
核心内容 |
重点 |
p名称空间配置 |
通过p:前缀简化Spring Bean的XML属性配置(如p:monsterID="500") |
需手动添加XML命名空间(光标放p处按Alt+Enter) |
属性赋值案例 |
用p:name="红孩儿"和p:skill="吐火"配置Monster Bean |
属性名需与类字段一致,未绑定命名空间会报错 |
IDEA操作技巧 |
多次尝试Alt+Enter添加命名空间(存在识别延迟) |
需观察是否自动生成xmlns:p="..." |
配置对比 |
p名称空间 vs 传统<property>标签 |
简洁性:p名称空间更紧凑;可读性:传统方式更直观 |
3.通过ref来配置bean(1)
知识点 |
核心内容 |
重点 |
Spring IOC容器配置 |
通过ref属性实现Bean对象的相互引用(如Service引用DAO) |
ref与直接属性赋值的区别; XML配置顺序是否影响依赖注入 |
依赖注入(DI)原理 |
容器自动扫描并建立Bean关联关系,无需严格按声明顺序配置 |
底层通过BeanDefinition映射管理依赖 |
XML配置实战 |
示例:MemberService通过<property name="dao" ref="memberDao"/>注入MemberDao |
ID唯一性验证; 属性名与ref的匹配逻辑 |
开发规范建议 |
虽无顺序要求,但推荐按业务逻辑顺序配置以提高可读性 |
配置错误检测机制(如IDE绿叶子标识) |
面试考点 |
面试不考具体XML配置形式,但需理解依赖注入的应用场景 |
“知道到哪查找”比死记硬背更重要 |
4.通过ref来配置bean(2)
知识点 |
核心内容 |
重点 |
IOC容器引用关系验证 |
通过reference标签引用memberDao,并分析IOC容器结构验证对象引用关系 |
单例对象存储位置(BeanFactory的singletonObjects表) |
单例对象标识 |
通过哈希值(如@2741)标识容器中的单例对象 |
对象引用一致性验证(memberService引用的memberDao哈希值需匹配) |
调试技巧 |
通过断点调试观察IOC容器的对象存储和引用关系 |
容器结构导航(BeanFactory → singletonObjects → 目标对象) |
引用关系逻辑 |
memberService中的memberDao属性实际指向容器初始化的同一对象 |
哈希值对比(@2741 vs @2761中的属性值) |
5.通过内部Bean来配置属性
知识点 |
核心内容 |
重点 |
内部Bean配置 |
在Spring IOC容器中直接配置内部Bean对象而非引用外部Bean |
属性配置时直接嵌套<bean>标签而非使用ref |
属性注入方式 |
通过<property>标签实现内部Bean的属性注入 |
与常规外部Bean引用的语法区别(<bean>嵌套 vs ref属性) |
ID自动生成机制 |
重复类名时系统自动追加编号(如memberService2) |
手动覆盖自动ID的优先级与命名规范 |
实战演示流程 |
1. 创建Service类; 2. 嵌套定义DAO Bean; 3. 测试内部Bean调用 |
配置文件的层级缩进规范与XML语法校验 |
验证方法 |
通过容器获取Bean实例并调用业务方法验证依赖注入 |
测试代码与配置文件的对应关系验证 |
6.对集合数组属性进行配置
知识点 |
核心内容 |
重点 |
Spring IOC容器集合属性配置 |
通过Master类演示集合/数组类型属性的赋值方法(List/Map/Set/数组/Properties) |
集合类型注入语法差异(List vs. Set vs. Map) |
List类型注入 |
使用<list>标签嵌套<ref>或<value>元素配置monsterList属性 |
需注意泛型类型匹配 |
Map类型注入 |
通过<map>标签定义masterMap,键值对需分别指定<key>和<entry> |
Key必须为String,值可为对象引用 |
Set类型注入 |
使用<set>标签配置monsterSet,元素需唯一性 |
与List注入的语法相似性易混淆 |
数组类型注入 |
通过<array>或直接value属性为nameArr字符串数组赋值 |
基础类型数组需特殊处理 |
Properties类型注入 |
采用<props>标签为pro属性配置键值对(强制String类型) |
与Map的配置差异(无需显式键值标签) |
对象关联设计 |
Master类通过集合属性管理Monster对象,体现1对多关系 |
实际开发中集合初始化的性能考量 |
7.对List属性进行配置
知识点 |
核心内容 |
重点 |
Spring IOC容器配置 |
通过引用方式和内部bean方式为集合属性赋值 |
引用方式 vs 内部bean方式的区别与应用场景 |
List集合配置 |
使用<list>标签配置集合属性,包含引用外部bean和定义内部bean两种方式 |
内部bean无需分配ID,仅限当前属性使用 |
属性注入方式 |
演示name属性直接赋值和集合属性复杂配置 |
集合元素可以是值类型(value)或引用类型(ref) |
配置灵活性 |
支持动态创建内部bean和引用现有bean混合使用 |
注意bean作用域和生命周期差异 |
测试验证方法 |
通过IoC容器获取bean并输出属性值验证配置效果 |
集合属性空值处理与默认初始化 |
命名规范 |
bean命名采用驼峰式(master)与显式ID配置 |
ID唯一性约束与引用关系维护 |
8.对Map属性进行配置
知识点 |
核心内容 |
重点 |
Map属性赋值 |
使用<map>标签包裹多个<entry>元素,每个entry包含<key>和<value>子元素 |
key的配置方式:必须通过<key><value>嵌套结构指定 |
Entry结构 |
每个entry代表一个键值对,key通过value标签指定,value可通过引用或内部bean方式配置 |
value赋值方式:可引用外部bean(ref)或使用内部bean定义 |
引用外部bean |
使用ref属性引用容器中已定义的bean作为map的value值 |
ID匹配验证:需确保引用的beanID与配置完全一致 |
Map配置验证 |
通过运行时输出验证map中key与value的对应关系 |
配置一致性检查:key命名与引用对象的逻辑关联性 |
配置灵活性 |
Spring容器支持多种属性注入方式,无需记忆所有语法但需理解实现原理 |
开发实践建议:掌握基础模式,具体语法可查阅文档 |
9.对Set属性进行配置
知识点 |
核心内容 |
重点 |
Set属性赋值 |
演示如何为Set属性赋值,支持引用外部Bean和定义内部Bean |
Set与List的使用方式相似,但存储结构不同 |
外部Bean引用 |
通过<property>标签的ref属性引用已定义的Bean(如monster5、monster6) |
需确保引用的Bean已存在且ID匹配 |
内部Bean定义 |
直接在<property>标签内嵌套定义Bean(如金角大王) |
内部Bean无需ID,作用域限于当前属性 |
Set属性特点 |
存储无序唯一对象,演示案例包含白骨精(ID:300)、红孩儿(ID:500)和金角大王(ID:666) |
易混淆点:Set与List的存储逻辑差异 |
运行验证 |
通过执行效果验证Set属性是否成功注入对象 |
需检查日志输出或程序反馈 |
10.对Array属性进行配置
知识点 |
核心内容 |
重点 |
数组属性赋值 |
演示如何给数组类型的属性赋值,直接使用value标签进行字符串数组赋值 |
区分value/reference的使用场景 |
数组类型定义 |
数组可包含多种数据类型(String/Set/Map/嵌套数组) |
注意数组元素类型的多样性 |
XML配置实践 |
monster name数组配置示例: <array><value>小妖怪</value><value>大妖怪</value><value>老妖怪</value></array> |
标签嵌套层级关系 |
业务逻辑适配 |
标签选择原则:根据数组元素类型决定使用value/ref/array等标签 |
类型判断与实际业务需求的匹配 |
11.对Properties属性进行配置
知识点 |
核心内容 |
重点 |
Spring属性注入(property) |
通过property标签以字符串形式配置键值对(KV),适用于简单属性注入 |
必须按字符串格式处理,不支持直接注入非字符串对象 |
Properties集合特性 |
作为HashMap子类,键值均为字符串,适用于配置参数(如用户名、密码、URL) |
与普通Map的区别:强制字符串类型,不可存储其他对象 |
Spring依赖注入灵活性 |
支持多种集合类型注入(List/Map/Properties),覆盖大部分开发场景 |
重点掌握List、Map、Properties三种集合的配置方式 |
属性配置演示 |
示例代码:<property name="username" value="root"/>,<property name="password" value="123456"/> |
需注意XML中属性值的引号使用和格式规范 |