AOP(面向切面编程)简单实践

AOP介绍

java支持面向切面编程,即利用AOP技术实现方法切面编织入其他代码逻辑。它有以下特点:

  1. 侵入性小,几乎可以不改动原来逻辑的情况下把新的逻辑加入业务。
  2. 实现方便,使用几个注解就可以实现,使系统更容易扩展。
  3. 更好的复用代码,比如事务日志打印,简单逻辑适合所有情况。

常见AOP注解含义

@Aspect:切面。表示一个横切进业务的一个对象。它里面包含切入点(Pointcut)和Advice(通知)。
@Pointcut:切入点。表示需要切入的位置,比如某些类或者某些方法,也就是先定一个范围。
@Before:Advice(通知)的一种,切入点的方法体执行之前执行。
@Around:Advice(通知)的一种,环绕切入点执行也就是把切入点包裹起来执行。
@After:Advice(通知)的一种,在切入点正常运行结束后执行。
@AfterReturning:Advice(通知)的一种,在切入点正常运行结束后执行,异常则不执行
@AfterThrowing:Advice(通知)的一种,在切入点运行异常时执行。

简单实践

1、定义AOP形式注解

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({
        ElementType.METHOD,
        ElementType.TYPE
})
@Retention(RetentionPolicy.RUNTIME)
public @interface PrintUser {
// 此处也可以加变量参数
}

2、定义Aspect切面类

@Aspect
@Component
@Slf4j
public class PrintUserAspect {

    @Pointcut("execution(* com.xxx.platform.xxx.project.web.xxx.controller..*(..))")
    public void pointCut(){
    }

    @After(value = "pointCut()")
    public void Before() {
        try{
            log.info("访问用户:"+ UserUtil.getUserName()+",userId:"+UserUtil.getUserId());
        }catch(Exception e){
            log.warn("记录访问用户信息失败",e);
        }
    }

}

3、将AOP应用到具体类或者接口上

@PrintUser
@RestController
public class XXXXController{
    @PostMapping("/login")
    public void login(HttpServletRequest request){
        System.out.println("Scheme:"+request.getScheme());
    }

}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值