使用Spring AOP实现简单的日志解耦

本文介绍了Spring AOP的基本概念,如切面、连接点、通知等,并通过一个简单的日志记录实例,展示了如何使用Spring AOP实现日志功能的解耦。文章详细阐述了从引入依赖、定义注解、编写切面到实际应用的步骤,最后总结了使用AOP的优势和在实际开发中的价值。
摘要由CSDN通过智能技术生成

一、什么是AOP?

AOP(Aspect Oriented Programming),即为面向切面编程,那什么是切面?如果你家里装了前置净水器的话,这个概念很好理解,就是在进水的地方,把水管切断,在进水之后入户之前装上净水器,实现了对进水的净化处理。
水路的切面
从扩展性来讲,如果用户需要全屋水加热,那就在切面里串一个加热器就行能轻松实现,不用每个出水的地方都加热,这就是切面的现实应用实例。

那到软件的世界里,切面又有什么作用呢?看下图:
Spring AOP面向切面编程
假设一个微服务对外提供2个业务api,每个业务api除了做业务逻辑处理外,都需要进行日志、授权这些公共的操作,如果每个服务里都写势必会造成代码重复,要进行修改也需要修改2个地方,如果服务多了维护工作量就更不用说了。
这里就可以使用AOP技术,在需要记录日志的地方做个切面,将请求代理到一个独立的服务,里面可以进行日志、鉴权等等操作,代理服务处理完成后,再将请求移交给原本的业务处理单元,这样就实现了面向切面编程。

二、AOP术语

  • Aspect,类的横切面
  • Join point,连接点,在Spring AOP里面,代表一个方法的执行点,在被切类上
  • Advice,动作,连接点上要执行的动作,常用的有around、before、after
  • Pointcut,横切点,用于和被切类的连接点进行连接
  • Introduction,引入,Spring AOP运行在切面类中引入新的接口
  • Target object,目标类,在Spring AOP里是代理类
  • AOP Proxy,AOP代理,在Spring AOP里是JDK动态代理或CGLIB代理
  • Weaving,织入,在Spring AOP中采用的是动态织入方式

三、使用Spring AOP实现日志实例

点击下载github源代码

1、POM文件引入依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>
2、编写日志注解类
package com.reeson.learn.demo.log;

import java.lang.annotation.*;

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface ControllerLog {
   
    String name();//所调用接口的名称
}
3、编写切面
@Aspect
@Component
public class ControllerAspect {
   

    private static final Logger logger = LoggerFactory.getLogger(ControllerAspect.class);

    private ThreadLocal<Map<String, Object>> threadLocal = new ThreadLocal<Map<String, Object>>();

    /**
     * 横切点
     */
    @Pointcut("execution(public * com.reeson.learn.demo.controller.*.*(..))")
    public void controllerLog() {
   
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值