关于Spring的AOP的内容

AOP(Aspect Oriented Programing) 称为:面向切面编程,主要是基于代理对象,对原来目标对象来创建代理对象,主要是在不修改原来代码的前提下,通过代理对象,调用增强功能的代码,从而对原有业务方法进行增强,它是一种编程思想。

AOP的应用场景
场景一:记录日志
场景二:监控方法运行时间(监控性能)
场景三:权限控制
场景四:缓存优化(第一次调用查询数据库,将查询结果放入到内存中,第二次调用,直接从内存对象返回,不需要查询数据库)
场景五:事务管理(调用方法前开启事务,调用方法后提交关闭事务)
在逻辑上是一组操作,开启事务,操作数据,关闭(提交)事

AspectJ 切面编程(xml)

在这里插入图片描述
AspectJ的不同通知类型
在这里插入图片描述
主要的步骤:
第一步:目标确定
第二步:通知/增强(编写)
第三步:配置切面(包含切入点和切面的结合)

接口

package cn.cyp.customerService;

/**
 * @Author:cyp
 * @date:2019/10/15 17:03
 * @Desc:
 */
public interface CustomerService {
    public void save();
    public void findCount();
}

实现类

package cn.cyp.customerServiceImpl;

import cn.cyp.customerService.CustomerService;

/**
 * @Author:cyp
 * @date:2019/10/15 17:05
 * @Desc:
 */
public class CustomerServiceImpl implements CustomerService {
    @Override
    public void save() {
        System.out.println("用户保存!!!");
    }

    @Override
    public void findCount() {
        System.out.println("用户查找!!!");
    }
}

普通类

package cn.cyp.productService;

/**
 * @Author:cyp
 * @date:2019/10/15 17:07
 * @Desc:
 */
public class ProductService {
    public void save(){
        System.out.println("商品保存!!!");
    }
    public void findCount(){
        System.out.println("商品查找!!!");
        int a=1/0;
    }
}

在这里插入图片描述
1.确定目标.xml

<!--配置目标对象-->
    <bean id="productService" class="cn.cyp.productService.ProductService"></bean>
    <bean id="CustomerService" class="cn.cyp.customerServiceImpl.CustomerServiceImpl"></bean>

2.编写before前置的,after后置的advice的增强
在这里插入图片描述
3.配置通知的bean
在这里插入图片描述
进行配置切入点和切面
在这里插入图片描述
进行测试代码
在这里插入图片描述
配置xml,可以增强多次
在这里插入图片描述

各种通知的应用

before 前置增强

主要是权限控制

编写一个增强类
在这里插入图片描述
在这里插入图片描述

AfterReturning 后置增强

特点:在目标方法运行后,返回值后执行增强代码逻辑。
应用场景:与业务相关的,如网上营业厅查询余额后,自动下发短信。
在这里插入图片描述
在这里插入图片描述

Around环绕通知

在方法的前后增加拦截器
需求:日志,缓存,权限和性能监控”事务管理“
在这里插入图片描述
在这里插入图片描述

AfterThrowing抛出通知

有异常就执行,没有就不执行
需求:处理异常,一般不可预知,记录日志,通知管理员
在这里插入图片描述
在这里插入图片描述

After最终通知

作用:不管目标方法是否发生异常,最终通知都会执行(类似于finally代码功能)
应用场景:释放资源 (关闭文件、 关闭数据库连接、 网络连接、 释放内存对象 )
在这里插入图片描述
在这里插入图片描述
关于各种方法可以接受的参数和返回值小结

在这里插入图片描述

@Aspectj注解配置切面编程

在这里插入图片描述
2.编写通知,配置切面
1)编写通知类,在通知类 添加@Aspect 注解,代表这是一个切面类,并将切面类交给spring管理(能被spring扫描到@Component)。
在这里插入图片描述
2)在通知方法上面加
在这里插入图片描述
例如前置通知
在这里插入图片描述

使用@Pointcut 定义切入点

问题:如果直接在通知注解中写切入点表达式,会发生重复编写,后期不便于维护
解决:
在实际开发中,切入点都是单独定义维护的,如:
使用xml定义切入点aop:pointcut
使用注解单独定义切入点@Pointcut

语法要求:
切入点方法:必须是 private void 无参数方法,方法名为切点名
在这里插入图片描述
使用切入点,引入上面的切入点方法(前置,后置,,,都可以用)
在这里插入图片描述
一个通知方法如何使用多个切入点表达式
在这里插入图片描述

如:@Before(value=”mypointcut1()|| mypointcut2()”)

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值