一、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 | controller --> service --> dao |
- POJO:简单 Java 对象,表示数据结构
- Controller:接收请求、返回响应
- Service:封装业务逻辑
- DAO:操作数据库 CRUD
四、MySQL 数据库设计范式
范式 | 核心要求 | 示例 |
---|---|---|
1NF(第一范式) | 字段原子性,每列不可拆分 | 姓名 不能为 "张三,李四" |
2NF(第二范式) | 消除部分依赖,非主键字段完全依赖主键 | 复合主键 学生ID+课程ID ,姓名只依赖 学生ID 应拆表 |
3NF(第三范式) | 消除传递依赖,非主键字段不依赖其他非主键字段 | 班级编号 → 班主任 → 电话号 ,电话号依赖班主任,应拆表 |
五、总结
- Spring 支持 XML + 注解混合配置,提高开发灵活性
- Spring AOP 简单易用;AspectJ 适合高性能场景
- 三层架构利于职责分离与项目维护
- 数据库设计应遵循范式,避免冗余和异常依赖