AOP快速了解

AOP面向切面编程

增强,日志收集,权限收集

现在举一个例子,假设有一个这样的流程,在学生系统中,选课功能模块中

1.记录日志(a.学号信息密码,b.调用了什么方法,c.当前时间)–>2.查询某个学生信息–>3.查询可以选的课列表–>4.记录日志(a.准备返回的数据,b.什么时候返回的)

第二个和第三个肯定是某个具体的方法,在日志中,这个时间很关键,从时间我们可以看出来,如果时间长,说明数据量大,性能差,这就说明需要优化

aop术语

先举一个例子

现在我们有诗人和骑士俩个对象,骑士要远征,而诗人对于骑士即将要远征需要去城门口歌颂他们,对于这个来说,我们所需要关注的是主要行为,是骑士类行为,而诗人对象(切面)会自动为我们进行服务,无需过多关注

  • 切面

这个通俗的说,就是被增强类,比如我们想要对某个类中的某个方法,需要增强,比如增加日志等功能,在这切面中定义切点,通知类型方法(日志功能)

  • 切点

实际被真正增强的方法,这个被称为切入点,切点表达式,知道对哪个类里面的哪个方法进行增强

  • 连接点

切点中的一个具体的方法,类里面有哪些方法可以被增强,这些方法被称为连接点

  • 通知

增强的代码

总结的说就是,什么地方(切面),对什么方法(连接点),在什么时候增强(通知类型),定位什么地方,什么方法(切点)

再举一个例子

定义俩个类,一个被增强类,这个是骑士类,骑士类主要做的行为是保卫国家

/**
 * @ClassName qishi
 * @Description 这个是被增强类
 * @Author LY
 * @Date 2023/9/14 1:45
 */
@Component
public class qishi {
//    @Pointcut("execution(* aop.qishi.*(..))")
    public void yuancheng(){
        System.out.println("我们要保卫国家,加油~");
    };
}

一个增强类,这个是诗人类,这个是对骑士类做的一个增强,比如说在骑士保卫国家之前,对骑士做一个祈福,在骑士保卫国家之后,对骑士的一个歌颂

这个是属于切面,在切面中要定义切点,这个切点中的表达式要定位到我们想要增强的某个类中的某个方法,以及我们想要增强的一些通知类型的方法,比如前置通知,后置通知,环绕通知等等

/**
 * @ClassName shiren
 * @Description 增强类
 * @Author LY
 * @Date 2023/9/14 1:45
 */
@Aspect //告诉spring这个是切面
@Component
public class shiren {
    /**
     * 对于诗人来说,他们主要要做的是在骑士出门前歌颂,以及在他们回来之后为他们祈福
     */
    @Before("execution(* aop.qishi.*(..))")
//    @Pointcut("execution(* aop.qishi.*(..))")
    public void gesong(){
        System.out.println("阿门,希望老天保佑你们~");
    }

    @After("execution(* aop.qishi.yuancheng(..))")
    public void qifu(){
        System.out.println("阿门,你们是最强的~");
    };
}

springConfig.java

@Configuration
@ComponentScan("aop")
@EnableAspectJAutoProxy(proxyTargetClass = true)//开启代理对象
public class springConfig {
}

结果
在这里插入图片描述
结果分析

  • @Ponintcut

在切面类中,先定义一个方法并使用 @Pointcut 注解来指定表达式。
然后在定义切面通知时,在通知注解中指定定义表达式的方法签名。
在上面举个的例子属于内置配置,这种属于注解配置

 @Pointcut("execution(* aop.qishi.*(..))")
    private void pointCut(){

    }
    @Before("pointCut()")
    public void gesong(){
        System.out.println("阿门,希望老天保佑你们~");
    }
  • @Before等通知注解

就直接使用我们定义好的切点方法签名即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值