面向切面工程AOP

AOP面向切面编程
本文介绍AOP(面向切面编程)的概念及其在Spring框架中的应用。详细讲解了AOP的各种注解如@Aspect、@Before、@After等的作用,并通过示例展示了如何使用这些注解来实现在业务代码前后添加日志、处理异常等功能。

AOP概念:

AOP: 面向切面编程 在不影响核心代码的前提下,可以在任意位置添加非核心代码。
使用场景
1.为信息添加日志
2.错误信息的汇总

通过动态代理实现核心业务和非核心业务的一种抽取

AOP的注解

注解作用
@Component加上配置注解,声明此类是一个配置类
@Aspect表示该类为切面类 -----> 删除某一个记录 添加日志。 操作日志
@Before(value = “要添加的切点”)在业务代码执行前执行的方法,value中定义要添加切面的位置/方法
@After(value = “要添加的切点”)在业务代码执行后执行的方法,value中定义要添加切面的位置/方法
@AfterReturning(value = “要添加的切点”)在业务代码执行后执行的方法,他可以得到返回结果,value中定义要添加切面的位置/方法
@AfterThrowing(value = “要添加的切点”)异常通知 只有发生异常时才会被执行。,value中定义要添加切面的位置/方法

使用spring 的aop:

(1) 把相关spring的依赖加入

 <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.9.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.2.9.RELEASE</version>
        </dependency>

        <!--切面依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>5.2.9.RELEASE</version>
        </dependency>
    </dependencies>

(2)创建一个切面类

package com.ykq.aop.after;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.Arrays;

/**
 * @Date 2021/3/25 15:52
 * @Version 1.0
 *
 * 日志切面类
 */
 //加上配置注解,声明此类是一个配置类
@Component
@Aspect //表示该类为切面类   -----> 删除某一个记录 添加日志。  操作日志
public class LogAspect {

	//@Before(value = "要添加的切点")
    @Before(value = "execution(* com.ykq.aop.after.*.*(..))")  //service
    public void before(JoinPoint joinPoint){
        String name = joinPoint.getSignature().getName();
        Object[] args = joinPoint.getArgs();
        System.out.println("AAA--->The "+name+" method begin with "+ Arrays.asList(args));
    }

    @After(value = "execution(* com.ykq.aop.after.*.*(..))")  //后置通知 finally
    public void after(JoinPoint joinPoint){
        System.out.println("该方法总会被执行");
    }
    @AfterReturning(value = "execution(* com.ykq.aop.after.*.*(..))",returning = "r")     //后置返回通知  他可以得到返回结果。
    public void afterReturning(JoinPoint joinPoint,int r){
        String name = joinPoint.getSignature().getName();
        System.out.println("BBB--->The "+name+" method ends: "+r);
    }

    //catch(Exception e)
    @AfterThrowing(value = "execution(* com.ykq.aop.after.*.*(..))",throwing = "e")   //异常通知 只有发生异常时才会被执行。
    public void afterThrowing(Exception e){
        System.out.println(e.getMessage());
    }
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值