【开发】实现一个简单的切面编程(Aspect)

本文介绍了面向切面编程(AOP)的概念,通过实例展示了如何在Java中使用Spring AOP和AspectJ注解来定义切面、切点、通知,以及如何在方法上应用自定义注解来触发切面行为。示例中,创建了一个APIAESEncryption切面,用于在方法执行前后插入日志记录和加密操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

面向切面编程

面向切面概念

什么是切面?
切面就是把多个类的公共行为封装起来。(比如日志记录,拦截方法,过滤等操作)
反过来理解就是多个类都需要这个操作,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。

代码部分

1.首先创建一个切面接口

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface APIAESEncryption {
    String value() default "";
}

2.创建一个类,@Pointcut定义切点。(相当于为APIAESEncryption 接口添加了实现方法。即切面的具体实现内容)

@Aspect
@Component
public class APIAESEncryptionAspect {

  @Pointcut("@annotation(com.fendasz.mokucloud.mokuplanet.annotation.APIAESEncryption)")
    private void cut() {

    }

    /**
     * <h5>功能:前置通知</h5>
     */
    @Before("cut()")
    public void before() {
        System.out.println("注解类型前置通知");
    }

    //后置通知
    @After("cut()")
    public void sayGoodbey() {
        System.out.println("注解类型后置通知");
    }

    //环绕通知。注意要有ProceedingJoinPoint参数传入。
    @Around("cut()")
    public Object sayAround(ProceedingJoinPoint pjp) throws Throwable {
    	  return pjp.proceed();//执行方法
    }
  }

3.添加以接口为名的注解即可(添加该注解就会实现此切面行为)

   @APIAESEncryption
   @ApiOperation(value = "客户端获取任务记录列表")
   @PostMapping("/record/list")
   public Object listRecord(
            @Valid @RequestBody ClientTaskDataSubmitRecordModel clientBasicParameter) {
        return service.listRecord(clientBasicParameter);
    }

4.依赖

     <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
        </dependency>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值