0%

Spring基础

一、Spring XML 配置与注解

1. 自动扫描 Bean (beans.xml)

1
<context:component-scan base-package="com.example"/>
  • 作用:扫描指定包及子包,将标注了以下注解的类注册为 Spring Bean:

    • @Component(普通组件)
    • @Service(业务逻辑层)
    • @Repository(DAO 层,支持异常转换)
    • @Controller(Web 控制层)

2. 常见注解说明

注解 说明
@Component 普通组件,交给 Spring 管理
@Service 业务逻辑组件,语义清晰
@Repository DAO 层组件,支持异常转换
@Controller 控制层组件,处理 Web 请求
@Autowired 按类型自动注入依赖
@Qualifier("beanName") @Autowired 配合,按名称注入
@PostConstruct 初始化方法(容器加载后执行)
@PreDestroy 销毁方法(容器关闭前执行)
@Scope("singleton") 单例(默认)
@Scope("prototype") 多例,每次获取新对象

二、Spring AOP 与 AspectJ 区别

特性 Spring AOP AspectJ
实现方式 JDK 或 CGLIB 动态代理 编译时织入 / 类加载时织入
原理 运行时生成代理类,拦截方法调用插入增强 修改字节码,将切面代码插入目标类
优点 简单易用,非侵入式 性能高,控制精细
缺点 存在性能开销 配置复杂,侵入性强

三、项目结构分层(经典三层架构)

1
2
3
controller --> service --> dao
| | |
Web层 业务逻辑层 数据访问层
  • POJO:简单 Java 对象,表示数据结构
  • Controller:接收请求、返回响应
  • Service:封装业务逻辑
  • DAO:操作数据库 CRUD

四、MySQL 数据库设计范式

范式 核心要求 示例
1NF(第一范式) 字段原子性,每列不可拆分 姓名 不能为 "张三,李四"
2NF(第二范式) 消除部分依赖,非主键字段完全依赖主键 复合主键 学生ID+课程ID,姓名只依赖 学生ID 应拆表
3NF(第三范式) 消除传递依赖,非主键字段不依赖其他非主键字段 班级编号 → 班主任 → 电话号,电话号依赖班主任,应拆表

五、总结

  • Spring 支持 XML + 注解混合配置,提高开发灵活性
  • Spring AOP 简单易用;AspectJ 适合高性能场景
  • 三层架构利于职责分离与项目维护
  • 数据库设计应遵循范式,避免冗余和异常依赖