学习日记-spring-day36-6.24

发布于:2025-06-25 ⋅ 阅读:(23) ⋅ 点赞:(0)

知识点:
 

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中属性值的引号使用和格式规范


网站公告

今日签到

点亮在社区的每一天
去签到