日常编码过程中,我们经常都会遇到在处理实际领域业务前后附加的逻辑,例如:权限校验,写操作日志,事务管理,推送等等。
spring提供了一种技术:面向切面的编程,即 AOP,它允许程序员对横切关注点或行为进行模块化。AOP 的核心构造是切面,它将那些影响多个类的行为封装到可重用的模块中。
AOP 和 IOC 是补充性的技术,它们都运用模块化方式解决企业应用程序开发中的复杂问题。在典型的面向对象开发方式中,可能要将日志记录语句放在所有方法和 Java 类中才能实现日志功能。而在 AOP 方式中,可以反过来将日志服务模块化,并以声明的方式将它们应用到需要日志的组件上。带来的优势就是 Java 类不需要知道日志服务的存在,也不需要考虑相关的代码。所以,用 Spring AOP 编写的应用程序代码是松散耦合的。
而像写操作日志这种高内聚、可抽象出来的流程,是非常适合做成切面的。只需要一行注解就完事了,不侵入业务逻辑代码。
我们先来简单设计下操作日志的表结构:
CREATE TABLE operate_log
(
id BIGINT(19) UNSIGNED AUTO_INCREMENT
COMMENT '主键ID'
PRIMARY KEY,
operate_type SMALLINT(6) DEFAULT '0' NOT NULL
COMMENT '操作类型,默认0(创建),可扩展',
operator VARCHAR(100) DEFAULT '0' NOT NULL
COMMENT '操作人,邮箱&#