介绍以下Spring的AOP
AOP(Aspect-Oriented Programming),即面向切面编程,用人的话就是把公共的逻辑抽离出来,让开发者能够专注于业务逻辑的开发。
和IOC一样,AOP也指的是一种思想。AOP思想是OOP(Object-Oriented-Programming)的补充。OOP是面向类和对象的,但是AOP则是面向不同切面。一个切面可以横跨多个类和对象去操作,极大的丰富了开发者的使用方式,提高了开发效率。
- 譬如,一个订单的创建,可能需要以下步骤:
- 权限校验
- 事务管理
- 创建订单
- 日志打印
如果使用AOP思想,我们就可以把这四步当成四个"切面",让业务人员专注开发第三个切面,其他三个切面则是基础的通用逻辑,统一交给AOP封装和管理。
如果有多个切面,他们的执行顺序是怎么样的呢?
多个切面默认执行顺序为按照bean的名称字母排序例如AspectA > AspectB
@Order注解的value属性指定各个切面的执行顺序,value值默认为Integer的最大值,value越小优先级越高。
因此Order注解默认优先级为最低,通过为多个切面使用@Order注解的value值指定其优先级。
能不能通过AOP,去定义一个注解呢?
可以,通过@pointcut注解,可以在里面使用annotation表达式,然后通过这个表达式,就可以自定义注解了。
我们使用AOP思想如何实现一个日志的这种管理?
1. 创建日志实体和数据库表
首先,需要创建一个日志实体类和对应的数据库表来存储日志信息。日志实体类通常包含用户名、用户操作、请求方法、请求参数、执行时长、IP地址和创建时间等属性。数据库表则对应这些属性,用于持久化存储日志数据。
2. 编写DAO和Service类
接着,编写数据访问对象(DAO)和服务类(Service),用于操作日志数据库表。在Spring中,可以使用MyBatis或JPA等持久层框架来简化数据库操作。
3. 导入Maven依赖
为了使用Spring AOP,需要在项目的pom.xml文件中添加spring-boot-starter-aop依赖。
4. 编写注解和切面类
定义一个自定义注解,比如@SysLog,用于标记需要记录日志的方法。然后,创建一个切面类,使用@Aspect注解标记,并在其中定义切点(Pointcut)和通知(Advice)。切点用于指定哪些方法需要被增强,而通知则定义了具体的增强逻辑,比如在方法执行前后记录日志信息。
5. 配置工具类
配置工具类,如HttpContextUtils和IPUtils,用于获取HTTP请求信息和IP地址,这些信息通常会记录在日志中。
6. 系统测试
最后,通过在控制器方法上添加自定义注解,如@SysLog(“查询用户列表”),来测试AOP日志功能是否正常工作。执行被注解标记的方法时,应该能够在数据库中看到相应的日志记录。