Spring 熟悉AOP

本博文是学习W3Cschool文章
https://www.w3cschool.cn/wkspring/izae1h9w.html
的学习笔记,如有侵权会立马删除

一、Spring框架的AOP

AOP(面向切面编程),把程序逻辑分解成不同的部分成为所谓的关注点,扩一个应用程序的多个点的功能被称为横切关注点,这些横切关注点要独立于应用程序的业务逻辑。可以应用于日志记录,审计,声明式事务,安全性和缓存等。

在OOP中,关键单元模块是类,在AOP中是切面。依赖注入帮助我们对应用程序对象相互解耦,AOP可以实现所影响的对象对横切关注点解耦。

二、AOP术语

描述
Aspect 一个模块具有一组提供横切需求的 APIs。例如,一个日志模块为了记录日志将被 AOP 方面调用。应用程序可以拥有任意数量的方面,这取决于需求。
Join point 在你的应用程序中它代表一个点,你可以在插件 AOP 方面。你也能说,它是在实际的应用程序中,其中一个操作将使用 Spring AOP 框架。
Advice 这是实际行动之前或之后执行的方法。这是在程序执行期间通过 Spring AOP 框架实际被调用的代码。
Pointcut 这是一组一个或多个连接点,通知应该被执行。你可以使用表达式或模式指定切入点正如我们将在 AOP 的例子中看到的。

三、通知类型

可以实现五种通知,前置通知、后置通知、返回后通知、抛出异常后通知和环绕通知。

四、用@Aspect方式自定义AOP

在spring-boot中导入如下的包
在这里插入图片描述

1.声明一个aspect
@Aspect
@Component
public class LogAspect {
    //在controller设计一个切面,来记录请求数据和返回数据
}
2.声明一个切入点
//将log切入点和com.zph.springbootapi.api包下的LogTestApi类中的log方法想匹配
 @Pointcut("execution(* com.zph.springbootapi.api.LogTestApi.log(..))")
    public void log(){
    }
//如果是想匹配一个类下的所有方法可以使用
// @Pointcut("execution(* com.zph.springbootapi.api.LogTestApi.*.*(..))")
3.声明建议

五种建议

    @Before("log()")
    public void doBefore(){
        logger.info("--------doBefore 1----------");
    }

    @After("log()")
    public void doAfter(){
        logger.info("--------doAfter 2----------");
    }

    @AfterReturning(returning = "result",pointcut = "log()")
    public void doAfterReturning(Object result){
        logger.info("--------doAfterReturning ----------:内容{}",result);
    }

    @AfterThrowing(pointcut = "log()", throwing="ex")
    public void doAfterThrowing(Exception ex){
        logger.info("--------doAfterThrowing ----------  :{}",ex.getMessage());
    }
    @Around("log()")
    public void doAround(){
        logger.info("--------doAround ----------  ");
    }
发布了25 篇原创文章 · 获赞 2 · 访问量 868
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 深蓝海洋 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览