美文网首页java学习Spring学习
浅析Spring AOP(一)——基本概念

浅析Spring AOP(一)——基本概念

作者: vince_zww | 来源:发表于2019-04-22 17:41 被阅读0次

    什么是AOP?

    与OOP对比,AOP是处理一些横切行问题。这些横切性问题不会影响到主逻辑的实现,但是会散落到代码的各个部分,难以维护。AOP就是把这些问题和主业务逻辑分开,达到与主业务逻辑解耦的目的。

    传统OOP是自上而下的逻辑开发;

    OOP

    AOP是一种面向切面的编程思想。这些横切性问题,把它们抽象为一个切面,关注点在切面的编程,这就是所谓的AOP。

    AOP关注点是横切性问题

    Spring AOP 简介

    如果说 IoC 是 Spring 的核心,那么面向切面编程就是 Spring 最为重要的功能之一了,在数据库事务中切面编程被广泛使用。

    AOP应用场景:

    日志记录,权限验证,效率检查,事务管理......

    学习Spring最好的方式是从spring官方文档入手.

    AOP中的一些基本概念:

    必须先知道这些基础概念,要不后面看得一脸懵逼。

    官网:AOP

    官网一开始给出的概念

    个人认为理解顺序应该为:

    Join point:连接点,例如:servlet中的longin()就是连接点;所以连接点在spring中它永远是一个方法。也可以说'目标对象中的方法就是一个连接点‘。

    pointcut:切点,就是连接点的集合!

    Weaving:织入:

    这个过程叫做织入(Weaving)

    Advice:通知,就字面意思,但是有2个部分组成,通知内容和通知到哪里去。

    通知类型:

    Before :前置通知,在连接点方法前调用

    After :后置通知,在连接点方法后调用

    AfterReturning:返回通知,在连接点方法执行并正常返回后调用,要求连接点方法在执行过程中没有发生异常

    AfterThrowing:异常通知,当连接点方法异常时调用

    Around:环绕通知,它将覆盖原有方法,但是允许你通过反射调用原有方法,后面会讲

    Aspect:切面!包括连接点,切点,通知的一个载体。(如果用AspectJ它就是一个类,如果用springXML的时候它就是一个标签)并且交给spring管理。

    Target object:目标对象,原始对象。

    AOP proxy:代理对象, 包含了原始对象的代码和增强后的代码的那个对象。

    Introduction:引入,个人理解为实现接口;

    代码验证为:

    @DeclareParents(value="com.vince.dao.*", defaultImpl=IndexDao.class)

    public static Dao dao;

    com.vince.dao.*下的所有类默认实现了IndexDao.class

    概念理解 切点匹配表达式

    切点匹配表达式:

    execution:可以定义到方法的的最小粒度是参数的返回类型,修饰符,包名,类名,方法名,Spring AOP主要也是使用这个匹配表达式。

    within:只能定义到类

    this:当前生成的代理对象的类型匹配

    target:目标对象类型匹配

    args:只针对参数

    execution和within的区别:

    他们的主要区别就是粒度,within主要是辅助,为了健全而存在的。

    execution(modifiers-pattern? ret-type-pattern declaring-type-pattern?name-pattern(param-pattern)   throws-pattern?)

      方法的可见性(不写代表所有)?方法的返回类型  方法所在类的全路径名 ?方法名类型(方法的参数类型) 方法抛出的异常类型?

    如果看的一脸懵逼....就借助代码理解一下。

    举个栗子:

    本篇只用到注解的方式:

    首先引入包:

    引入包

    代码:

    切面1-1
    切面1-2 dao 扫描
    测试类

    只开启了beforeWithin()和beforeExecution()这两个通知

    执行结果

    结果可以看出beforeExecution匹配了2个切入点,而beforeWithin匹配了全部的切入点。如需测试代码可以私信。

    AOP的内容非常多,本文主要介绍了SpringAOP的一些基础概念。

    参考资料:

    感觉写得超级好:Spring(4)——面向切面编程(AOP模块)

    官网:AOP


    本人才疏学浅,以上纯属个人理解,如有不对,还望批评指正。

    相关文章

      网友评论

        本文标题:浅析Spring AOP(一)——基本概念

        本文链接:https://www.haomeiwen.com/subject/hqixgqtx.html