AOP(Aspect-Oriented Programming,面向切面编程)是对OOP的一个极大补充,但是AOP中各种概念实体却是有些复杂,尤其是对于刚接触AOP的人来说。但是为了使用AOP,为了理解AOP,这些实体又是迈步过去的坎,编程虐我千百遍,我待编程如初恋。我相信,用真心和努力终能感动它。AOP本身就没有一个统一的标准,不同的AOP实现都略有不同,再加上这些东西都是老外搞出来的,翻译到国内又造成了二次不统一,所以还是用英文表述这些概念更清晰一些。切来看
Joinpoint:在系统运行之前,AOP的功能模块都需要织入到OOP中,为了进行这种织入,我们需要知道在系统的哪些执行点上进行织入操作。Joinpoint就是织入时的点。一些常见的Joinpoint类型:
●方法调用(Method Call),某个方法被调用的时候所处的程序执行点;
●方法执行(Method Call execution),某个方法内部执行开始的点;注意与方法调用的区别,方法调用是在调用对象上的点,方法执行是被调用的方法逻辑执行时的点;
●构造方法调用(Constructor Call),构造方法执行(Constructor Call execution),与上面的两个类似;
●字段设置(Field Set),字段获取(Field Get),字段被设置或获取时的点;
●异常处理执行(Exception Handler Execution),在应用程序执行过程中,某些类型异常抛出后,对应的异常处理逻辑执行的时点;
●类初始化(Class initialization),静态类型,静态语句块执行时的点;
在程序的执行过程中,几乎所有的执行时点都可以称为Joinpoint,但是有些实现难度太大,效果却很一般。不同的AOP产品支持不同的Joinpoint,Spring目前只支持方法级别的Jointpoint,更具的的说是方法执行,这在大部分时间内都足够使用了。Spring在实现AOP时,很好的遵循了二八原则,花20%的代价实现80%的功能。
Pointcut:前面有了Jointpoint,但是我们必须理解,前面说的Jointpoint是切入点的类型,比如方法执行是一种Joinpoint,但是在实际织入的时候,我们还是应该指明在哪些类的哪些方法上执行织入。Pointcut是Joinpoint的表述方式,Pointcut规定了具体的Joinpoint。比如使用Pointcut来指定Jointpoint:类A的execute()方法被调用的所有的Joinpoint。在Spring中,使用正则表达式来指定Pointcut。
Advice:面向切面的编程就是在不改变源码的情况下,将横切逻辑(比如日志记录,安全检查)织入到系统中,Advice就是横切逻辑。按照Advice在Joinpoint位置执行时机的差异或者完成的功能不同,Advice可以分成一下几类:
●Before Advice:在Joinpoint指定位置之前执行的Advice;
●After Advice:在Joinpoint之后执行的Advice,它包括三类
(1)Joinpoint正常返回之后,After returning Advice
(2)Joinpoint抛出异常的情况下,After throwing Advice
(3)不管Joinpoint是正常执行,还是抛出异常都会执行,After Advice
关于After Advice三种类型的执行点如下图所示:
●Around Advice,在Joinpoint之前和之后都执定相应的逻辑,甚至可以中断或者忽略Joinpoint处原来的程序流程执行,这个功能最强大,应用最多。
●Introduction,为类添加一些属性和方法,这是一种特殊的Advice。
Aspect:AOP的概念实体,Aspect是Pointcut和Advice的模块化封装,它既包括了Advice的定义,也包括了Joinpoint的定义(包含的是Pointcut,因为Pointcut定义Joinpoint)。比如Spring就是负责将Aspect所定义的Advice织入到Aspect所定义的Joinpoint中。
织入:将Advice添加到Joinpoint上,Spring采用动态代理和CGLIB来完成织入。
目标对象:符合Pointcut所指定的条件,将在织入过程中被织入横切逻辑的对象。
以上对AOP中的各种实体进行了介绍,总结一下:AOP是面向切面的编程,其中Aspect就是切面,它包括了横切逻辑(Advice)和Pointcut,横切逻辑就是我们要添加的功能,而Pointcut则规定了在哪些地方(Jointpoint)执行这些添加的功能。
分享到:
相关推荐
在“SSH例子”中,增加操作可能涉及创建一个新的实体类,定义与数据库表的映射关系,并使用Hibernate的Session接口来插入新的记录。 接下来,我们谈谈AOP(面向切面编程): AOP允许程序员定义“切面”,这些切面...
在IT行业中,Spring AOP(面向切面编程)是一种强大的工具,它允许开发者在不修改原有业务代码的情况下,对程序进行功能增强或监控。在这个"springAOP实现数据字典.zip"压缩包中,我们主要关注的是如何利用Spring ...
一、AOP编程概览 面向对象编程技术进入软件开发的主流对软件的开发方式产生了极大的影响,开发者可以用一组实体以及这些实体之间的关系将系统形象地表示出来,这使得他们能够设计出规模更大、更复杂的系统,开发周期...
标题中的“ext进销存aop ioc ef”涉及到的是几个关键的IT概念,它们分别是EXT(EXT JS)、进销存系统、AOP(面向切面编程)和IOC(控制反转),以及EF(Entity Framework)。这里我们将分别对这些概念进行详细解释。...
在本DEMO中,AOP拦截器被用来在消息传递过程中捕获和处理消息。这可能包括验证请求的合法性、添加操作日志、处理错误等。通过这种方式,我们可以将这些通用功能从业务逻辑中解耦,提高代码的可维护性和复用性。 **...
- **Spring AOP**:Spring框架中提供的面向切面编程支持。通过Spring AOP,开发者可以在不修改业务逻辑代码的前提下,为应用程序添加横切关注点(如日志记录、事务管理等)。Spring AOP主要通过代理机制实现。 ### ...
下面将详细讲解这三个框架以及AOP在实际开发中的应用。 首先,Spring是Java企业级应用开发中的核心框架,它提供了一个容器来管理对象的生命周期和依赖关系。在SSM架构中,Spring主要负责IoC(Inversion of Control...
Spring MVC、Spring AOP、Spring Security和Hibernate是Java开发中常用的四大框架,它们各自负责不同的领域,但在实际项目中往往需要进行整合以实现更高效、更安全的开发。本实例代码提供了一个完整的整合示例,涵盖...
在Spring框架中,AOP(面向切面编程)是一种强大的工具,用于实现关注点的分离,使得我们可以将系统中的核心业务逻辑与横切关注点,如日志、事务管理、安全控制、审计等,解耦合。在这个场景中,我们讨论的是如何...
在这个项目中,我们利用自定义的Aop注解来实现数据源的动态切换。自定义注解可以附加在方法上,当该方法被调用时,AOP会捕获这个调用并执行相应的逻辑,即切换到指定的数据源。 具体实现步骤如下: 1. 定义数据源...
Spring框架是Java开发中的核心组件,它以其Inversion of Control(IoC)和Aspect-Oriented Programming(AOP)特性而闻名。让我们深入探讨这些概念以及如何在实际项目中整合Spring与Hibernate。 **Inversion of ...
基于Spring boot + maven,以注解+AOP方式实现的java后端项目接口参数校验框架。迄今为止使用最简单、最容易理解的参数校验方案。博客地址:https://blog.csdn.net/weixin_42686388/article/details/104009771
面向方面编程(AOP,Aspect-Oriented Programming)是一种编程范式,旨在解决传统面向对象编程(OOP)中横切关注点的问题。横切关注点是指那些跨越多个对象或模块,但又不直接属于单一模块职责的功能,如日志记录、...
在Java开发领域,AOP(Aspect Oriented Programming,面向切面编程)和字段验证是两个重要的概念,它们分别用于解决程序中的横切关注点和数据校验问题。本篇文章将详细探讨这两个技术及其在实际应用中的作用。 首先...
6. **Lombok**: 代码生成工具,可以减少Java实体类中的getter/setter等方法的书写。 7. **Commons BeanUtils**: 常用的Bean操作工具包。 这些依赖可以通过Maven或Gradle等方式添加到项目中。 #### YML文件配置 ...
类定义了对象的结构和行为,而对象则代表了现实世界中的实体或者概念。通过继承,一个类可以从另一个类中获取属性和行为,实现代码的复用。多态性则是允许不同的对象对同一消息作出不同响应,增加了代码的灵活性。 ...
在项目结构上,`demo`这个压缩包文件可能包含了以下内容:SpringBoot的启动类、配置文件、MyBatis的相关Mapper接口和XML配置、AOP切面类以及相关的实体类和业务服务类。在实际开发中,需要根据具体的业务场景和需求...
在Spring AOP(面向切面编程)中,我们可以通过定义拦截器来实现对系统操作日志和异常日志的记录,这些日志信息通常会被存储到数据库中以便于后续的分析和故障排查。下面将详细介绍如何使用Spring AOP实现这个功能。...
在"AOP-cache"项目中,model目录可能包含了项目中的实体模型类,这些类通常用于表示数据库中的表结构,它们是数据访问层与业务层之间的桥梁。在实现缓存的过程中,模型类的属性和方法可能会被用作生成缓存key的一...