Spring框架:AOP的概述

AOP的概述

一、什么是aop

AOP Aspect Oriented Programing

面向切面编程 ----是一种编程思想:在不修改源代码的情况下,对目标方法进行增强,使用动态代理的机制,在不修改源代码的情况下,对某些方法进行动态的增强

传统开发会存在很多重复代码,对此的传统的解决方法是抽取共有的代码,编写工具类

AOP解决后:

1:程序员在编写具体的业务逻辑处理方法时,只需关心核心的业务逻辑处理,既提高了工作效率,又使代码变更简洁优雅

2:日后的维护中由于业务逻辑代码与共有代码分开存放,而且共有代码是集中存放的,因此使维护工作变得简单轻松

二、aop的应用场景

场景一: 记录日志

场景二: 监控方法运行时间 (监控性能)

场景三: 权限控制

场景四: 缓存优化 (第一次调用查询数据库,将查询结果放入内存对象,第二次调用,直接从内存对象返回,不需要查询数据库 )

场景五: 事务管理 (调用方法前开启事务, 调用方法后提交关闭事务 )

三、aop的相关术语

在这里插入图片描述

四、Spring AOP编程两种方式

1:Spring 1.2 开始支持AOP编程 (传统SpringAOP 编程),编程非常复杂 ---- 已不再使用

2:Spring 2.0 之后支持第三方 AOP框架(AspectJ),实现另一种 AOP编程 – 推荐

五、aspectj切面编程

在这里插入图片描述

在这里插入图片描述

面向切面编程流程:

1:编写目标(UserMapper - addUser - 切入点)

2:编写advice (通知,)

3:导包和引入约束

在这里插入图片描述

在xml文件中引入aop约束

springAOP的拓展,AOP联盟的规范,spring对aspect的支持,aspectj的官方包

4:配置aop自动代理

在spring的核心配置文件中配置aop的自动代理:aop:aspectj-autoproxy/

5:配置切入点和切面

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QV8sCtZn-1654768594901)(C:\Users\26017\AppData\Roaming\Typora\typora-user-images\image-20220609173639593.png)]

注意:

1:通知以及目标必须都是由spring管理的。

2:声明切面类@Aspect - 配置切入点表达式是在切面类中进行配置 - 一般情况下就是增强的类

3:使用切入点表达式进行配置

切入点表达式的语法

bean(beanId/name) --表示拦截某个bean下面的所有的方法

execution(***** com.sky.service.UserService.user(…))

*:匹配任何数量字符;

…:匹配任何数量字符的重复,如在类型模式中匹配任何数量包和子包;而在方法参数模式中匹配任何数量参数。

//    bean:增强某个bean(类)下的所有方法,一般定位到Service
//    这个bean下的所有方法都被增强了,在执行这个bean下面的方法的时候,先执行我这个方法
//    @Before(value = "bean(userService)")
//    * :输出数据类型     ..:有参和无参
//    * com.sky.service.UserService.update(..)
    @AfterReturning(value = "execution(* com.sky.service.UserService.update(..))")
    public void logInfo(){
//        System.currentTimeMillis():时间戳
        System.out.println(System.currentTimeMillis());
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值