1 编程范式
1.1 面向过程
1.2 面向对象
1.3 面向切面编程
1.4 函数式编程
1.5 事件驱动编程
2 什么是面向切面编程
2.1 是一种编程范式,而不是一种编程语言
2.2 解决一些特定的问题
2.3 作为面向对象编程的一种补充
3 AOP产生的初衷
3.1 解决代码重复性问题 Don't Repeat Yourself
3.2 解决关注点分离问题 Separation of Concerns
3.2.1 水平分离(技术上划分)
控制层 -> 服务层 -> 持久层
3.2.2 垂直分离(模块上划分)
模块划分
3.2.3 切面分离(功能上划分)
分离功能性需求和非功能性需求
4 使用AOP的好处
4.1 集中处理某一个关注点、横切逻辑
4.2 可以很方便地添加、删除关注点
4.3 侵入性减少,增强代码可读性和可维护性
5 AOP的使用场景
5.1 权限控制
5.2 缓存控制
5.3 事物控制
5.4 审计日志
5.5 性能监控
5.6 分布式追踪
5.7 异常处理
6 利用传统方法实现权限验证
6.1 创建一个springBoot项目
下载地址:点击前往
6.2 新建一个Product实体类
package cn.test.demo.base_demo.entity; /** * @author 王杨帅 * @create 2018-04-29 17:11 * @desc 商品实体类 **/ public class Product { private Integer id; private String name; public Product() { } public Product(Integer id, String name) { this.id = id; this.name = name; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Product{" + "id=" + id + ", name='" + name + '\'' + '}'; } }