AOP简介

这篇具有很好参考价值的文章主要介绍了AOP简介。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题1:AOP的作用是什么?

问题2:连接点和切入点有什么区别,二者谁的范围大?

问题3:请描述什么是切面?

1.1 AOP简介和作用【理解】

  • AOP(Aspect Oriented Programming)面向切面编程,一种编程范式,指导开发者如何组织程序结构

    • OOP(Object Oriented Programming)面向对象编程

  • 作用:在不惊动原始设计的基础上为其进行功能增强。简单的说就是在不改变方法源代码的基础上对方法进行功能增强。

  • Spring理念:无入侵式/无侵入式

1.2 AOP 的底层实现

AOP 的底层是通过 Spring 提供的的动态代理技术实现的。

在运行期间,Spring通过动态代理技术动态的生成代理对象,代理对象方法执行时进行增强功能的介入,在去调用目标对象的方法,从而完成功能的增强。

1.3 AOP 的动态代理技术

JDK 代理 : 基于接口的动态代理技术

cglib 代理:基于父类的动态代理技术

AOP简介,spring,java,开发语言

1.4 JDK 的动态代理

①目标类接口

public interface TargetInterface {
    public void save();
}

②目标类

public class Target implements TargetInterface {
    @Override
    public void save() {
        System.out.println("Target 方法运行中....");
    }
}

③增强类

public class Advice {

    public void beforeRun(){
        System.out.println("前置增强方法。。。。");
    }

    public void afterRun(){
        System.out.println("后置增强方法。。。。");
    }
}

④ 测试动态代理代码

public class ProxyTest {
    public static void main(String[] args) {
        //目标对象
        final Target target=new Target();
        //增强对象
        final Advice advice=new Advice();

        //使用jdk动态代理对象加载目标类
        TargetInterface proxy=(TargetInterface)Proxy.newProxyInstance(
                target.getClass().getClassLoader(),
                target.getClass().getInterfaces(),
                new InvocationHandler() {
                    //调用代理对象的任何方法,实质执行的都是invoke方法
                    /*
                        proxy 代理对象
                        method 当前执行的目标方法
                        args 传递参数
                     */
                    @Override
                   public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        /*
                            method.invoke: 执行目标方法
                            2个参数: 目标对象 和 实际数据
                         */
                        advice.beforeRun();
                        Object invoke = method.invoke(target, args);
                        advice.afterRun();
                        return invoke;
                    }
                }
        );
        //调用代理对象
        proxy.save();
    }
}

1.5 cglib 的动态代理

①目标类

public class Target {
    public void save() {
        System.out.println("Target running....");
    }
}

增强类

public class Advice {
    public void beforeRun(){
        System.out.println("前置增强方法。。。。");
    }
    public void afterRun(){
        System.out.println("后置增强方法。。。。");
    }
}

②动态代理代码

public class ProxyTest {
    public static void main(final String[] args) {
        //目标对象
        final Target target=new Target();
        //增强对象
        final Advice advice=new Advice();
        //返回值 就是动态生成的代理对象 基于cglib
        //1、创建增强器
        Enhancer enhancer=new Enhancer();
        //2、设置父类
        enhancer.setSuperclass(Target.class);
        //3、设置回调
        enhancer.setCallback(new MethodInterceptor() {
            @Override
            public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
               advice.beforeRun();
                Object invoke = method.invoke(target, objects);
                advice.afterRun();
                return invoke;
            }
        });
        //4、创建代理对象
        Target proxy = (Target)enhancer.create();
        //5、调用目标方法
        proxy.save();
    }
}

1.6 AOP中的核心概念【理解】

Spring 的 AOP 实现底层就是对上面的动态代理的代码进行了封装,并通过配置的方式完成指定目标的方法增强。

 AOP 的相关术语

  • 连接点(JoinPoint):所谓连接点其实就是可以被增强的方法,比如(正在执行的方法,例如:update()、delete()、select()等)都是连接点。

  • 切入点(Pointcut):进行功能增强了的方法,例如:update()、delete()方法,select()方法没有被增强所以不是切入点,但是是连接点。

    • 在SpringAOP中,一个切入点可以只描述一个具体方法,也可以匹配多个方法

      • 一个具体方法:com.by.dao包下的BookDao接口中的无形参无返回值的save方法

      • 匹配多个方法:所有的save方法,所有的get开头的方法,所有以Dao结尾的接口中的任意方法,所有带有一个参数的方法

  • 通知(Advice):在切入点前后执行的操作,也就是增强的共性功能

    • 在SpringAOP中,功能最终以方法的形式呈现

  • 通知类:通知方法所在的类叫做通知类

  • 切面(Aspect):描述通知与切入点的对应关系,也就是哪些通知方法对应哪些切入点方法。其实就是(目标方法+增强)

AOP简介,spring,java,开发语言

 1.7 AOP 开发明确的事项

1)需要编写的内容

  • 编写核心业务代码(目标类的目标方法)

  • 编写切面类,切面类中有通知(增强功能方法)

  • 在配置文件中,配置织入关系,即将哪些通知与哪些连接点进行结合

2)AOP 技术实现的内容

Spring 框架监控切入点方法的执行。一旦监控到切入点方法被运行,使用代理机制,动态创建目标对象的代理对象,根据通知类别,在代理对象的对应位置,将通知对应的功能织入,完成完整的代码逻辑运行。

3)AOP 底层使用哪种代理方式

在 spring 中,框架会根据目标类是否实现了接口来决定采用哪种动态代理的方式。

1.8 知识要点

  • aop:面向切面编程

  • aop底层实现:基于JDK的动态代理 和 基于Cglib的动态代理

  • aop的重点概念:

    • Pointcut(切入点):被增强的方法

    • Advice(通知/ 增强):封装增强业务逻辑的方法

    • Aspect(切面):切点+通知

    • Weaving(织入):将切点与通知结合的过程

  • 开发明确事项:

    • 谁是切点(切点表达式配置)

    • 谁是通知(切面类中的增强方法)

    • 将切点和通知进行织入配置文章来源地址https://www.toymoban.com/news/detail-521353.html

到了这里,关于AOP简介的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java Sping aop 以及Spring aop 的应用事务管理

    线程死锁概念和如何避免死锁的发生: 线程的通信 wait notify() notify():---Object类 线程的状态: NEW ---start()---就绪状态---CPU时间片---运行状态 RUNNABLE]- --sleep()--- TIMED_WAITING ---wait()---- WAITING ----sysn---Blocked---- 终止状态[T] 线程池: 常见的线程池种类: 4种和原始 在软件业,AOP为Aspect Ori

    2024年02月12日
    浏览(41)
  • Java EE 突击 14 - Spring AOP

    这个专栏给大家介绍一下 Java 家族的核心产品 - SSM 框架 JavaEE 进阶专栏 Java 语言能走到现在 , 仍然屹立不衰的原因 , 有一部分就是因为 SSM 框架的存在 接下来 , 博主会带大家了解一下 Spring、Spring Boot、Spring MVC、MyBatis 相关知识点 并且带领大家进行环境的配置 , 让大家真正用好

    2024年02月11日
    浏览(44)
  • 8.1Java EE——Spring AOP

            Spring的AOP模块是Spring框架体系中十分重要的内容,该模块一般适用于具有横切逻辑的场景,如访问控制、事务管理和性能监控等 一、AOP概述         AOP的全称是Aspect Oriented Programming,即面向切面编程。和OOP不同,AOP主张将程序中相同的业务逻辑进行横向隔离,

    2024年02月16日
    浏览(45)
  • 【Spring】javaBean、依赖注入、面向切面AOP、使用注解开发

    有一定规范的Java实体类,类内提供了一些公共方法以便外界对该对象的内部属性进行操作 所有属性都是private,所有的属性都可以通过get/set方法进行访问,同时还需要有一个无参构造(默认就有) 高内聚,低耦合是现代软件的开发的设计模式 之前编写的图书管理系统具有高

    2024年02月08日
    浏览(86)
  • JAVA:使用 Spring AOP 实现面向切面编程

    1、简述 在现代的软件开发中,面向切面编程(AOP)是一种重要的编程范式,它允许我们将横切关注点(如日志记录、性能监控、事务管理等)从应用程序的核心业务逻辑中分离出来,以提高代码的模块化和可维护性。Spring 框架提供了强大的 AOP 支持,使得我们可以轻松地实

    2024年04月13日
    浏览(47)
  • 【Java面试】Spring中的IOC和AOP

    IOC:控制反转也叫依赖注入。利用了工厂模式 将对象交给容器管理,你只需要在spring配置文件总配置相应的bean,以及设置相关的属性,让spring容器来生成类的实例对象以及管理对象。在spring容器启动的时候,spring会把你在配置文件中配置的bean都初始化好,然后在你需要调用的

    2024年02月10日
    浏览(50)
  • 【Java 初级】Spring核心之面向切面编程(AOP)

    tip:作为程序员一定学习编程之道,一定要对代码的编写有追求,不能实现就完事了。我们应该让自己写的代码更加优雅,即使这会费时费力。 💕💕 推荐: 体系化学习Java(Java面试专题) AOP(面向切面编程)是一种编程范式,用于将横切关注点(如日志记录、性能统计等

    2024年02月04日
    浏览(51)
  • 代码优雅升级,提升开发效率:挖掘Spring AOP配置的学习宝藏!

    1.1.1 语法格式 首先我们先要明确两个概念: 切入点:要进行增强的方法 切入点表达式:要进行增强的方法的描述方式 对于切入点的描述,我们其实是有两中方式的,先来看下前面的例子 描述方式一:执行com.test.dao包下的BookDao接口中的无参数update方法 描述方式二:执行com.test

    2024年02月04日
    浏览(40)
  • Java实战:Spring Boot实现AOP记录操作日志

    本文将详细介绍如何在Spring Boot应用程序中使用Aspect Oriented Programming(AOP)来实现记录操作日志的功能。我们将探讨Spring Boot集成AOP的基本概念,以及如何使用Spring Boot实现AOP记录操作日志。最后,我们将通过一个具体示例来演示整个实现过程。本文适合已经具备Spring Boot基础

    2024年02月22日
    浏览(59)
  • 【Java学习】 Spring的基础理解 IOC、AOP以及事务

        官网: https://spring.io/projects/spring-framework#overview     官方下载工具: https://repo.spring.io/release/org/springframework/spring/     github下载: https://github.com/spring-projects/spring-framework     maven依赖: 1.spring全家桶的结构构图:              最下边的是测试单元   其中spring封装

    2024年02月09日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包