Java spring AOP基础

目录
  • 一、AOP概述
  • 二、AOP相关语述
  • 三、AOP与动态代理
    • 3.1 JDK动态代理
    • 3.2 CGLib动态代理
    • 3.3 两者对比
  • 总结

一、AOP概述

AOP,即面向切面编程,简单来说就是将代码中重复的部分抽取出来,在需要执行的时候使用动态代理的技术,在不修改源码的基础上对方法进行增强;AOP也是Spring框架的一个重点,利用AOP可以实现业务逻辑各个部分的隔离,从而使得业务逻辑各个部分的耦合性降低,提高程序的可重用性,同时提高开发效率。

二、AOP相关语述

1)连接点(Joinpoint):在程序执行过程中,需要拦截的方法

2)切入点(Pointcut):就是拦截方法设置的规则,连接点的一系列集合

3)通知(advice):增强连接点的实现代码(就是需要为连接点绑定的方法)

通知类型 说明
前置通知(Before) 执行连接点方法之前执行
环绕通知(Around) 环绕连接点方法执行
后置通知(After) 执行连接点方法之后执行
后置返回通知(After Running) 在连接点方法返回结果之后执行,如果方法出现异常则不会执行此通知(通常是最后执行)
异常通知(After Throwing) 在连接点方法抛出异常之后执行

4)目标对象(target):被代理对象,指被通知的对象,也称为被增强对象

5)织入(Weaving):将切面代码插入到目标对象上,从而生成代理对象的过程

6)代理(Proxy):一个类被AOP织入增强后,就产生一个结果代理类

7)切面(Aspect):我们的拦截处理类,封装用于横向插入系统功能(如事务、日志等)的类。

三、AOP与动态代理

AOP中的代理可以说是由AOP框架动态生成的一个对象,该对象可以作为目标对象使用。Spring中的AOP有两种方式实现动态代理:JDK动态代理、CGLib动态代理。

3.1 JDK动态代理

JDK动态代理主要涉及java.lang.reflect包下边的两个类:Proxy和InvocationHandler。其中InvocationHandler是一个接口,可以通过实现该接口定义横切逻辑,并通过反射机制调用目标类的代码,动态地将横切逻辑和业务逻辑贬值在一起。

具体实现原理:

1)通过实现InvocationHandlet接口创建自己的调用处理器;

2)通过为Proxy类指定ClassLoader对象和一组interface来创建动态代理;

3)通过反射机制获取动态代理类的构造函数,其唯一参数类型就是调用处理器接口类型;

4)通过构造函数创建动态代理类实例,构造时调用处理器对象作为参数参入;

JDK动态代理是面向接口的代理模式,如果被代理目标没有接口那么Spring也无能为力,Spring通过Java的反射机制生产被代理接口的新的匿名实现类,重写了其中AOP的增强方法。

3.2 CGLib动态代理

CGLib采用底层的字节码技术,全称是:Code Generation Libraray,CGLib可以为一个类创建一个子类,在子类中采用方法拦截的技术拦截所有父类方法的调用并顺势织入横切逻辑。CGLib是一个强大、高性能的Code生产类库,可以实现运行期动态扩展java类,Spring在运行期间通过 CGlib继承要被动态代理的类,重写父类的方法,实现AOP面向切面编程呢。

3.3 两者对比

如果要被代理的对象是个实现类,那么Spring会使用JDK动态代理开完成操作(Spring默认采用JDK动态代理实现机制);如果要被代理的对象不是个实现类那么,Spring会强制使用CGLib来实现动态代理

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • 详细解读Java Spring AOP

    一.对AOP的初印象 首先先给出一段比较专业的术语(来自百度): 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型.利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率. 然后我们举一个比较容易理解的例

  • java Spring AOP详解及简单实例

    一.什么是AOP AOP(Aspect Oriented Programming)面向切面编程不同于OOP(Object Oriented Programming)面向对象编程,AOP是将程序的运行看成一个流程切面,其中可以在切面中的点嵌入程序. 举个例子,有一个People类,也有一个Servant仆人类,在People吃饭之前,Servant会准备饭,在People吃完饭之后,Servant会进行打扫,这就是典型的面向切面编程. 其流程图为: 二.Spring AOP实现: 1.People

  • Java Spring AOP详解

    目录 1.什么是AOP? 2.AOP在Spring中的作用 3.使用Spring实现AOP 方式一:使用Spring的接口 方法二:使用自定义类来实现 方法三:使用注解实现 总结 1.什么是AOP? AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型.利用AOP可以对业务逻辑的各个部

  • Java spring AOP基础

    目录 一.AOP概述 二.AOP相关语述 三.AOP与动态代理 3.1 JDK动态代理 3.2 CGLib动态代理 3.3 两者对比 总结 一.AOP概述 AOP,即面向切面编程,简单来说就是将代码中重复的部分抽取出来,在需要执行的时候使用动态代理的技术,在不修改源码的基础上对方法进行增强:AOP也是Spring框架的一个重点,利用AOP可以实现业务逻辑各个部分的隔离,从而使得业务逻辑各个部分的耦合性降低,提高程序的可重用性,同时提高开发效率. 二.AOP相关语述 1)连接点(Joinpoint

  • Java Spring AOP之PointCut案例详解

    目录 一.PointCut接口 二.ClassFilter接口 三.MethodMatcher接口 总结 一.PointCut接口 /* * Copyright 2002-2012 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with

  • 详解Java Spring AOP

    目录 前言 一.AOP底层原理 1.AOP底层使用动态代理 二.AOP术语 1.连接点 2.切入点 3.通知(增强) 4.切面 三.AOP 操作(准备工作) Spring 框架一般都是基于 AspectJ 实现 AOP 操作 方式一:使用Spring的接口实现增添功能 方式二:自定义类 方式三:全注解配置实现 总结 前言 面向切面编程,利用 AOP 可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率.即不改变源代码而添加新功能,可插

  • Java Spring AOP源码解析之事务实现原理

    目录 不用Spring管理事务? 编程式事务管理 使用PlatformTransactionManager 使用TransactionTemplate 声明式事务管理 使用@Transactional注解 源码解析 参考博客 总结 不用Spring管理事务? 让我们先来看一下不用spring管理事务时,各种框架是如何管理事务的 使用JDBC来管理事务 使用Hibernate来管理事务 业务逻辑和事务代码是耦合到一块的,并且和框架的具体api绑定了.当我们换一种框架来实现时,里面对事务控制的代码就

  • 一篇文章带你了解Java Spring基础与IOC

    目录 About Spring About IOC Hello Spring Hello.java Beans.xml Test.java IOC创建对象的几种方式 Spring import settings Dependency Injection 1.构造器注入 2.set注入 3.拓展注入 P-namespcae&C-namespace Bean scopes singleton prototype Bean的自动装配 byName autowire byType autowire 小结

  • Spring BOOT AOP基础应用教程

    目录 面试课题 Spring boot AOP Spring boot 动态代理 AOP 切面 基本知识 自定义注解 自定义注解 如何在AOP引用 面试课题 Spring boot AOP Spring boot 中 AOP是其中 重要的特性,其实现的方式借助的拦截器 + Proxy 动态代理,在AOP主要用于日志打印,安全拦截,事务处理,异常处理和性能统计,要向深刻了解Spring boot AOP 原理,从 Spring 动态代理的原理讲起 Spring boot 动态代理 原理: 动态代理

  • 图解JAVA中Spring Aop作用

    假如没有aop,在做日志处理的时候,我们会在每个方法中添加日志处理,比如 但大多数的日子处理代码是相同的,为了实现代码复用,我们可能把日志处理抽离成一个新的方法.但是这样我们仍然必须手动插入这些方法. 但这样两个方法就是强耦合的,假如此时我们不需要这个功能了,或者想换成其他功能,那么就必须一个个修改. 通过动态代理,可以在指定位置执行对应流程.这样就可以将一些横向的功能抽离出来形成一个独立的模块,然后在指定位置 插入这些功能.这样的思想,被称为面向切面编程,亦即AOP. 为了在指定位置执行这些横

随机推荐