• Java 面向切面 AOP


    1. 什么是AOP
    2. 如何实现
    3. 基本概念

    一、什么是AOP

      AOP: Aspect Oriented Programming 即面向切面编程,它是一种思想,针对业务处理过程中的切面进行提取,以达到优化代码的目的,减少重复代码的目的。例如在编写业务逻辑的时候,

    我们习惯都要写日志,事务控制,以及权限控制,每一个子模块都要写这些代码,存在明显的重复。这时候,运用面向切面的编程思想,采用横切技术,将代码中重复的部分,不影响业务逻辑的

    部分抽取出来,放在某个地方集中式管理,调用。形成日志切面、事务控制切面、权限控制切面。这样我们只需要关注业务逻辑,即提高了效率,又使得代码变得简洁优雅。这是一种面向切面的

    编程思想

      AOP 的编程原理:使用了动态代理的技术,动态代理包括JDK 机制的动态代理:只能用于实现了接口的类生成代理。 Cglib 代理:针对没有实现接口的类生成代理,采用的是底层字节码增强

    技术,生成当前类的代理类(增强技术使用的是ASM,字节码操作框架)

    分类

    1.  AOP (Aspect Oriented Programming) 面向切面编程
    2. OOP (Object Oriented Programming) 面向对象编程
    3. POP( Procedure Oriented programming) 面向过程编程
    4. FP (Functional Programming) 面向函数编程

    二、如何实现

    2.1 引入maven 依赖

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-aop</artifactId>
    </dependency>

    2.2 编写切面配置

    @Aspect
    @Component
    public class MyLogAspect {
    
        private final Logger logger = LoggerFactory.getLogger(MyLogAspect.class);
    
        @Pointcut("@annotation(com.example.demo.annotation.MyLog)")
        public void pointCut(){}
    
        @Around("pointCut()")
        public void around(ProceedingJoinPoint joinPoint) throws Throwable{
            logger.info("around 前方法");
            joinPoint.proceed();
             logger.info("around 后方法");
        }
    
        @Before("pointCut()")
        public void doBefore(){
             logger.info("doBefore 方法");
        }
    
        @AfterReturning("pointCut()")
        public void doAfterReturn(JoinPoint joinPoint){
             logger.info("doAfterReturn 方法");
        }
    
        @After("pointCut()")
        public void doAfter(){
             logger.info("doAfter 方法");
        }
    
        @AfterThrowing("pointCut()")
        public void doThrowable(){
             logger.info("doThrowable 方法");
        }
    
    }

    三、基本概念

    • 通知(Advice): AOP 框架中的增强处理。通知描述了切面何时执行以及如何执行增强处理。
    • 连接点(join point): 连接点表示应用执行过程中能够插入切面的一个点,这个点可以是方法的调用、异常的抛出。在 Spring AOP 中,连接点总是方法的调用。
    • 切点(PointCut): 可以插入增强处理的连接点。
    • 切面(Aspect): 切面是通知和切点的结合。
    • 引入(Introduction):引入允许我们向现有的类添加新的方法或者属性。
    • 织入(Weaving): 将增强处理添加到目标对象中,并创建一个被增强的对象,这个过程就是织入。

    通知的类型

            

    正常情况执行顺序:

    1. around start
    2. before
    3. 方法
    4. aroud end
    5. after
    6. afterReturning

    异常执行顺序:

    1. around start
    2. before
    3. 方法(产生异常)
    4. after
    5. afterThrowing

    参考:https://www.cnblogs.com/joy99/p/10941543.html

    参考:https://segmentfault.com/a/1190000020857142

  • 相关阅读:
    Win10设置多时区时钟方法技巧
    Win10技巧:使用“照片”应用剪辑视频、添加特效
    kk录像机怎么剪辑视频 kk录像机视频剪辑教程
    360快剪辑怎么使用 360快剪辑软件使用方法介绍
    WPF HyperLink链接下划线隐藏
    ORACLE 如何产生一个随机数
    电脑的开始菜单点不了 用户帐户出现在桌面上
    无法加载DLL"***.dll":找不到指定的模块
    C#调用dll提示"试图加载格式不正确的程序"原因及解决方法
    C#中与C++中的 LPWSTR(wchar_t *) 对应的类型
  • 原文地址:https://www.cnblogs.com/bytecodebuffer/p/10399432.html
Copyright © 2020-2023  润新知