学习日记-spring-day36-6.24
知识点:
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中属性值的引号使用和格式规范 |