AOP面向切面编程

1、概念

Spring核心特征中除了IoC控制反转、DI依赖注入,还有一个核心就是强大的面向切面编程AOP(Aspect Oriented Programming)的实现。

实现了横切关注的模块化(将功能性代码与核心代码进行分离开来),避免代码缠绕,削除代码分散。

2、应用场景

日志与跟踪、事务管理、安全、缓存、错误处理.........等

3、核心概念

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ndLcvTsq-1623125484755)(RackMultipart20210608-4-9jbi5w_html_c5e7751ad417952f.png)]

 

连接点:程序执行中的一个点,例如方法的调用或异常的抛出

切入点:选择一个或者多个连接点的表达式

Advice:在选择的每个连接点执行的代码

切面:一个囊括了连接点与Advice的模块

编制:将切面与主要代码进行结合的技术

4、切入点表达式:

4.1、常规表达式

通配符:*    -匹配一次(包括返回值类型,包,类,方法,参数)

              ..    -匹配0次或多次(参数或包)

4.2、注解表达式

 任何名称使用send开头的void方法,且添加了@RolesAllowed注解

 5、通知

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zQfJDgzH-1623125484756)(RackMultipart20210608-4-9jbi5w_html_d0e5a5c2ce593c85.png)]

 

前置通知(@Before):在目标方法执行之前进行的操作(注意:如果通知抛出异常,则目标方法不会被调用)

返回后通知(@AfterReturning):在目标方法执行成功并获取到返回值之后执行

异常通知(@AfterThrowing):在目标方法抛出异常时执行

后置通知(@After):在目标方法执行完成之后执行(注意:无论目标方法是否抛出异常都会执行)

环绕通知(@Around):在目标方法执行之前和执行之后都进行操作

6、操作步骤

6.1、添加依赖

<dependencies>
     <!--添加aop依赖包-->
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-aop</artifactId>
     </dependency>
 </dependencies>

6.2、创建切面类

@Component
@Aspect//切面:由切点和通知组成
public class AspectD {
    //切点表达式: *表示1个 ..表示多个 *依次代表方法返回值,类名,方法名,(..)是参数列表
    @Pointcut("execution(* cn.tedu.service.*.*(..))")
    public void pointcut(){} //该方法主要作用就是承载@Pointcut

    @Before("pointcut()")//前置通知,在每一个方法开始之前被调用
    public void beforeMethod(JoinPoint joinPoint){
        System.out.println("我是前置通知");
    }
    @After("pointcut()")//后置通知,在每一个方法结束后被调用
    public void afterMethod(JoinPoint joinPoint){
        System.out.println("我是后置通知");
    }
    @Around("pointcut()")//环绕通知,方法执行前后都被调用,必须有返回值
    public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {}

6.3、测试

@Service
public class ControllerImpl {
    
    public void add(){
        for (int i = 0; i < 100; i++) {
            System.out.print("~");
        }
    }
}


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值