zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    jQuery选择器
    js创建对象的几种方式
    call()和apply()
    js实现二分查找
    关于HTTP请求
    node/npm命令收集
    微信H5开发笔记——记录开发中用到的知识(手机摇动、事件捕获、wechat禁止分享、正则、promise...)
    css额外学习笔记
    gulp 结构和运行步骤——笔记1
    手机版H5开发--收集大神们的笔记
  • 原文地址:https://www.cnblogs.com/bytecodebuffer/p/10399432.html
Copyright © 2011-2022 走看看