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

学习日记-day38-spring-6.27

知识点:

1.通过属性文件配置Bean(1)

知识点

核心内容

易混淆点/难点

应用场景

Bean后置处理器

配置与底层机制解析,需结合AOP概念逐步讲解

底层机制理解需结合源码实践

Spring框架中Bean生命周期管理

属性文件注入值

通过.properties文件动态配置Bean属性(如数据库连接参数)

Unicode编码处理、classpath:路径前缀的必填性

外部化配置(如数据库连接池、多环境切换)

context:property-placeholder

指定属性文件位置(需配合location属性及classpath:前缀)

Namespace未绑定报错(需通过Alt+Enter自动修复)

集中管理敏感配置或频繁变更的参数

属性引用语法

使用${key}表达式引用属性文件中的值

属性名需与文件中的键名严格一致

动态注入Bean属性(如monsterID=${monsterID})

中文编码问题

属性文件中的中文需处理Unicode转义(示例未展开)

未配置编码可能导致乱码

国际化或多语言支持场景

2.通过属性文件配置Bean(2)

知识点

核心内容

易混淆点/难点

操作要点

属性文件中文编码问题

属性文件读取中文时出现乱码,需转换为Unicode编码

文件默认编码(如UTF-8)与Unicode编码的差异

使用站长工具转换:将中文(如“乌龟精”)粘贴至工具,生成Unicode编码后替换原内容

Unicode编码工具使用

通过在线工具(如站长工具)实现中文转Unicode

工具操作步骤的准确性(如输入框粘贴、点击转换按钮)

1. 输入中文文本

2. 点击“中文转Unicode”

3. 复制结果至属性文件

配置文件编码规范

属性文件通常以英文/数字为主,中文需特殊处理

中文配置的适用场景(如特殊案例)

优先避免中文配置,必要时按流程转换

乱码问题排查逻辑

乱码根源为文件编码不匹配(非Unicode)

编码类型判断错误(如误用ASCII或UTF-8)

检查文件编码格式,确认是否为Unicode

3.自动装配Bean(1)

知识点

核心内容

重点

XML的自动装配

通过autowire属性实现Spring容器中对象的自动依赖注入,支持byType和byName两种方式

byType需确保容器中同类型对象唯一,否则报错;byName需属性名与bean的id匹配

自动装配原理

容器根据类型或名称自动查找并注入依赖对象(如OrderService自动注入OrderDao)

属性必须有setter方法;无属性的类无需配置autowire

byType装配限制

容器中不能存在多个同类型的bean实例(如两个OrderDao会触发NoUniqueBeanDefinitionException)

需检查重复定义问题,优先保证类型唯一性

装配验证方法

通过输出对象哈希值或调用链验证依赖是否成功注入(如orderAction.getService().getDao())

空指针异常表明装配失败,需检查配置或依赖关系

与传统配置对比

替代手动<property ref>标签,简化XML配置

灵活性较低,复杂场景仍需显式配置

4.自动装配Bean(2)

知识点

核心内容

重点

自动装配by name机制

通过属性的set方法名(如setOrderDao)而非属性名来匹配容器中的bean ID

易混淆点:不是按属性名匹配,而是按set方法后缀匹配

自动装配by type机制

根据类型匹配容器中的bean,不依赖命名

当存在多个同类型bean时会报错

装配失败场景

set方法名与bean ID不匹配时会导致装配失败

示例:setOrderService2需要匹配ID为orderService2的bean

底层实现原理

基于反射机制实现自动装配

关键点:通过解析set方法名确定匹配规则

Spring学习路径

掌握反射机制是理解Spring底层的关键

对Java基础要求较高,是学习SSM/Spring Boot的基础

5.Spring El 表达式配置Bean

知识点

核心内容

重点

Spring EL表达式

运行时查询和操作对象的表达式机制

井号大括号界定符 vs JSP EL表达式

表达式赋值方式

字面量赋值、引用其他bean、调用方法返回值

静态方法调用需全类名

属性注入类型

基本类型、对象引用、方法返回值、运算结果

对象引用需提前配置对应bean

方法调用特性

支持实例方法和静态方法返回值注入

静态方法调用语法T(全类名).方法()

运算表达式

支持算术运算结果直接赋值

表达式计算发生在容器初始化阶段

6.注解配置Bean基本介绍

知识点

核心内容

重点

基于注解配置Bean

通过注解(如@Component、@Controller、@Service、@Repository)标识组件类,简化Spring配置

注解作用范围区分(@Controller vs @Service vs @Repository)

@Component

通用组件注解,标识类为Spring管理的组件

需手动实现业务逻辑,注解仅声明作用

@Controller

标识控制器类(如Servlet),用于Web层

与传统Servlet配置对比,需结合业务代码

@Service

标识业务逻辑处理类(Service层)

注解本身不实现功能,需开发者编码

@Repository

标识持久化层类(DAO层)

与@Component通用性区别,数据库操作专属

7.注解配置Bean快速入门(1)

知识点

核心内容

重点

基于注解配置

使用注解标识不同层级的类(@Repository/@Service/@Controller/@Component)

注解与XML配置的区别

AOP包引入

必须引入aop包并添加到项目库(lib目录下需Add as Library)

遗漏包导致注解失效

注解作用域

@Repository标识持久化层;@Service标识业务层;@Controller标识控制器(通常为Servlet);@Component为通用组件

混淆@Controller与普通类注解

项目结构规范

实际开发需按层级分包(如dao/service/web),示例为教学简化统一放在component包

包路径对扫描的影响

注解扫描机制

Spring容器自动扫描注解类并创建实例到IOC容器

未正确配置扫描路径的后果

8.注解配置Bean快速入门(2)

知识点

核心内容

重点

Spring注解配置

通过@ComponentScan配置自动扫描包路径下的注解类

必须同时满足:1.类添加注解 2.配置扫描路径

四大核心注解

@Controller @Service @Repository @Component

注解功能等效,语义化区分架构层级

Bean命名规则

默认采用类名首字母小写作为ID

显式指定ID:@Service("customName")

扫描机制验证

通过Debug模式查看singletonObjects表

常见错误:漏配扫描路径/拼写错误

依赖注入方式

支持按类型和按ID两种获取方式

推荐按类型注入(需确保类唯一)

配置标签详解

<context:component-scan base-package="com.xx">

必须引入context命名空间

测试验证方法

1. 移除注解测试 2. 移除扫描配置测试

报错信息NoSuchBeanDefinitionException分析

9.注解配置Bean注意事项和细节(1)

知识点

核心内容

重点

基于注解配置Bean的依赖包

必须引入指定jar包,否则会报错

易忽略jar包引入,导致配置失效

自动扫描包配置

需在Spring配置文件中通过<context:component-scan>标签指定扫描包路径

未导入context命名空间会触发错误提示

通配符扫描子包

使用com.xxx.*格式可递归扫描当前包及其所有子包

直接写包名(不加通配符)仍会扫描子包(底层递归机制)

注解类扫描验证

通过getBean()或Debug模式检查容器中是否存在目标类实例

需确认类位置是否在指定包/子包下(避免同名类干扰)

默认Bean ID规则

未显式指定ID时,默认以类名首字母小写作为ID(如Pig→pig)

需注意ID冲突风险

10.注解配置Bean注意事项和细节(2)

知识点

核心内容

重点

Spring IOC容器的注解检测机制

Spring不会验证@Controller注解类的实际功能,仅根据注解生成对象

注解名称仅用于程序员识别,容器不解析实际含义

组件注解(@Controller/@Service/@Repository)区别

在纯Spring环境中功能相同,Spring MVC环境中存在平台差异

需区分基础IOC容器与MVC环境下的注解行为差异

包扫描过滤规则(resource-pattern)

支持user*.class格式匹配,仅扫描符合命名规则的编译后class文件

运行时扫描的是out目录的编译文件而非源码

注解扫描排除策略

不添加注解即可避免被扫描,比resource-pattern更常用

显式过滤与隐式排除的优先级差异

类加载路径工作机制

运行时实际工作目录为out而非src,解释.class后缀的必要性

开发环境与运行环境的目录结构差异

11.注解配置Bean注意事项和细节(3)

知识点

核心内容

重点

exclude filter

用于排除指定包及其子包下特定注解类型的类

必须填写完整注解路径(如org.springframework.stereotype.Service)

include filter

反向操作,仅包含指定注解类型的类

需配合useDefaultFilters=false使用

注解过滤机制

支持多种过滤类型(annotation/aspectj/regex等)

annotation方式最常用

配置演示

通过debug展示单例池中对象的变化

service/controller等注解类的实际过滤效果验证

对比维度

exclude与include的逻辑反向关系

默认过滤机制开关的影响

12.注解配置Bean注意事项和细节(4)

知识点

核心内容

重点

Spring注解ID默认规则

类名首字母小写作为默认ID(如UserDao→userDao)

与手动指定ID的区别

注解value属性指定ID

通过@Repository(value="自定义ID")覆盖默认规则

value属性可省略写法

注解类型等效性

@Controller/@Service/@Repository在纯Spring场景下功能等效

与SpringMVC中的差异

容器对象获取验证

通过applicationContext.getBean("id",Class)双重验证机制

ID不存在时的异常处理

注解底层机制

反射读取注解value值作为容器注册依据

元注解(@Target等)的作用解析

调试验证方法

通过断点查看singletonObjects容器实际存储情况

动态修改ID的验证流程

学习路径建议

需先掌握Java注解基础(类型/元注解/反射读取)

注解基础与框架实现的衔接点

相关文章:

  • Veo 3 视频生成大模型完整操作教程(2025)
  • 元宇宙与人工智能的融合:从虚拟世界到智能生态的IT新革命
  • 社会工程--如何使用对方的语言
  • 汇编8086:解决创建、写入文档在临时文档的问题 | 汇编实现创建文件永久保存
  • 【innovus基础】- 最基本的timing工具自动修复方法
  • Unity性能优化-渲染模块(1)-CPU侧(1)-优化方向
  • 每日八股文6.28
  • [Python]-基础篇1- 从零开始的Python入门指南
  • 【编译原理】第一章 习题
  • Class1线性回归
  • Ubuntu 20.04 系统上运行 SLAM卡顿是什么原因
  • TCP 交互数据流优化策略与性能分析研究​
  • 131. 分割回文串
  • 人工智能-基础篇-4-人工智能AI、机器学习ML和深度学习DL之间的关系
  • 【STM32CubeMX】ST官网MCU固件库下载及安装
  • 人工智能-基础篇-2-什么是机器学习?(ML,监督学习,半监督学习,零监督学习,强化学习,深度学习,机器学习步骤等)
  • 论软件系统架构评估及其应用
  • springBoot+liquibase+hibernate支持各种国产数据库
  • 2025年智能营销产品发展和应用趋势
  • WPS JS宏4-3 匿名函数(简化函数方法-1)学习笔记