spring aop原理

Spring AOP 详解

…衆ロ難τιáo~ 提交于 2020-01-05 06:03:36
原理 AOP(Aspect Oriented Programming),也就是面向方面编程的技术。AOP基于IoC基础,是对OOP的有益补充。   AOP将应用系统分为两部分,核心业务逻辑(Core business concerns)及横向的通用逻辑,也就是所谓的方面Crosscutting enterprise concerns,例如,所有大中型应用都要涉及到的持久化管理(Persistent)、事务管理(Transaction Management)、安全管理(Security)、日志管理(Logging)和调试管理(Debugging)等。   AOP正在成为软件开发的下一个光环。使用AOP,你可以将处理aspect的代码注入主程序,通常主程序的主要目的并不在于处理这些aspect。AOP可以防止代码混乱。   Spring framework是很有前途的AOP技术。作为一种非侵略性的、轻型的AOP framework,你无需使用预编译器或其他的元标签,便可以在Java程序中使用它。这意味着开发团队里只需一人要对付AOP framework,其他人还是像往常一样编程。    AOP概念   让我们从定义一些重要的AOP概念开始。   — 方面(Aspect):一个关注点的模块化,这个关注点实现可能另外横切多个对象。事务管理是J2EE应用中一个很好的横切关注点例子

Spring AOP 详解

陌路散爱 提交于 2020-01-05 06:02:11
  AOP作为Spring中核心部分,在Spring中扮演者重要的角色。AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处都基本相似。比如权限认证、日志、事务处理。Aop 的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。   实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。   关于动态代理和静态代理的原理,大家可以参考: http://www.cnblogs.com/yfyzy/p/4401833.html   在我们学习Spring的AOP之前,我们先来学习学习一下关于AOP的相关术语。   1.通知(Advice)   通知定义了切面是什么以及何时使用。描述了切面要完成的工作和何时需要执行这个工作,就像我们平时约会时说的时间地点一样∩_∩。   2.连接点(Joinpoint):   程序能够应用通知的一个“时机”,这些“时机”就是连接点,例如方法被调用时、异常被抛出时等等。   3.切入点(Pointcut)   通知定义了切面要发生的“故事”和时间

针对spring--AOP的理解及例子

人盡茶涼 提交于 2020-01-05 06:02:01
1.了解AOP的相关术语 1.通知(Advice): 通知定义了切面是什么,以及何时使用。描述了切面要完成的工作和何时需要执行这个工作。 2.连接点(Joinpoint): 程序能够应用通知的一个“时机”,这些“时机”就是连接点,例如方法被调用时、异常被抛出时等等。 3.切入点(Pointcut): 通知定义了切面要发生的“故事”和时间,那么切入点就定义了“故事”发生的地点,例如某个类或方法的名称,Spring中允许我们方便的用正则表达式来指定(切面在哪个方法的前或后做出的那个方法点) 4.切面(Aspect): 通知和切入点共同组成了切面:时间、地点和要发生的“故事”,事务管理是J2EE应用中一个很好的横切关注点例子,切面用Spring的Advisor或拦截器实现 5.引入(Introduction): 引入允许我们向现有的类添加新的方法和属性(Spring提供了一个方法注入的功能) 6.目标(Target): 即被通知的对象,如果没有AOP,那么它的逻辑将要交叉别的事务逻辑,有了AOP之后它可以只关注自己要做的事(AOP让他做爱做的事) 7.代理(proxy): 应用通知的对象,详细内容参见设计模式里面的代理模式 8.织入(Weaving): 把切面应用到目标对象来创建新的代理对象的过程,织入一般发生在如下几个时机: (1)编译时:当一个类文件被编译时进行织入

Spring AOP小记

淺唱寂寞╮ 提交于 2020-01-05 05:41:21
一、概述 在通常的开发过程中,我们调用的顺序通常是controller->service-dao,其中,service中包含着太多的业务逻辑,并且还要不断调用dao来实现自身的业务逻辑,经常会导致业务耗时过久,在aop出现之前,方式一般是在函数中开始写一个startTime,结尾再写一个endTime来查看执行该函数的耗时,过多的使用此类方式会导致代码的耦合性太高,不利于管理,于是,AOP(面向切面)出现了。AOP关注的是横向的,而OOP的是纵向。 Spring自2.0版本开始采用@AspectJ注解非常容易的定义一个切面。@AspectJ注解使用AspectJ切点表达式语法进行切点定义,可以通过切点函数、运算符、通配符等高级功能进行切点定义,拥有强大的连接点描述能力。 1.1 特点 AOP(Aspect Oriented Programming)面向切面编程,通过预编译方式和运行期动态代理实现程序功能的横向多模块统一控制的一种技术。AOP是OOP的补充,是Spring框架中的一个重要内容。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。AOP可以分为静态织入与动态织入,静态织入即在编译前将需织入内容写入目标模块中,这样成本非常高。动态织入则不需要改变目标模块。Spring框架实现了AOP

Spring aop

此生再无相见时 提交于 2020-01-05 05:38:51
AOP 概念 1 aop :面向切面(方面)编程,扩展功能不修改源代码实现 2 AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码 3 aop 底层使用动态代理实现 ( 1 )第一种情况,有接口情况,使用动态代理创建接口实现类代理对象 ( 2 )第二种情况,没有接口情况,使用动态代理创建类的子类代理对象 AOP 原理 画图分析原理 AOP 操作术语 Joinpoint( 连接点 ): 类里面可以被增强的方法,这些方法称为连接点 Pointcut( 切入点 ) : 所谓切入点是指我们要对哪些 Joinpoint 进行拦截的定义 . Advice( 通知 / 增强 ): 所谓通知是指拦截到 Joinpoint 之后所要做的事情就是通知 . 通知分为前置通知 , 后置通知 , 异常通知 , 最终通知 , 环绕通知 ( 切面要完成的功能 ) Aspect( 切面 ): 是切入点和通知(引介)的结合 Introduction( 引介 ): 引介是一种特殊的通知在不修改类代码的前提下 , Introduction 可以在运行期为类动态地添加一些方法或 Field. Target( 目标对象 ): 代理的目标对象 ( 要增强的类 ) Weaving( 织入 ): 是把增强应用到目标的过程 . 把 advice 应用到 target 的过程 Proxy (代理) : 一个类被 AOP

Spring 学习(三)AOP

房东的猫 提交于 2020-01-05 05:38:23
(1)AOP概述   - AOP:面向切面编程,扩展功能不修改源代码实现   - AOP采取 横向抽取机制 ,取代了传统的 纵向继承体系 重复性代码 (2)AOP底层原理     原始方法-------》纵向继承体系          横向机制: JDK代理机制:jdk动态代理是由 Java 内部的反射机制来实现的.jdk动态代理的应用前提,必须是目标类基于统一的接口。如果没有上述前提,jdk动态代理不能应用。 CGlib代理机制:Cglib的原理是对指定的目标类动态生成一个子类,并覆盖其中方法实现增强,但因为采用的是继承,所以不能对final修饰的类和final方法进行代理。        (3)AOP操作相关术语(重点切入点、增强、切面) spring的AOP操作(基于aspectj的XML方式) Joinpoint 连接点:类里面可以被增强的方法,这些方法称为连接点 Pointcut 切入点:在类里面可以有很多的方法被增强,但是在实际的操作中值只是增强了add()和update(),则这两个实际增强的方法称为切入点 Advice 通知/增强:实际增强的逻辑,称为增强,例如扩展日志的功能,这个日志功能称为增强        分为: (1)前置通知:在方法之前执行      (2)后置通知:在方法之后执行      (3)异常通知:方法出现异常      (4)最终通知

Spring框架IOC容器和AOP解析

笑着哭i 提交于 2020-01-05 05:37:06
主要分析点: 一、Spring开源框架的简介 二、Spring下IOC容器和DI(依赖注入Dependency injection) 三、Spring下面向切面编程(AOP)和事务管理配置 一、Spring开源框架的简介    Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。    spring的基本框架主要包含六大模块:DAO、ORM、AOP、JEE、WEB、CORE Spring DAO :Spring提供了对JDBC的操作支持:JdbcTemplate模板工具类 。 Spring ORM :Spring可以与ORM框架整合。例如Spring整合Hibernate框架,其中Spring还提供HibernateDaoSupport工具类

Spring框架的核心功能之AOP技术

北城余情 提交于 2020-01-05 05:32:15
技术分析之Spring框架的核心功能之AOP技术 AOP的概述 1. 什么是AOP的技术? * 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程 * AOP是一种编程范式,隶属于软工范畴,指导开发者如何组织程序结构 * AOP最早由AOP联盟的组织提出的,制定了一套规范.Spring将AOP思想引入到框架中,必须遵守AOP联盟的规范 * 通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术 * AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型 * 利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率 2. AOP:面向切面编程.(思想.---解决OOP遇到一些问题) 3. AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码(性能监视、事务管理、安全检查、缓存) 4. 为什么要学习AOP * 可以在不修改源代码的前提下,对程序进行增强!! Spring框架的AOP的底层实现 1. Srping框架的AOP技术底层也是采用的代理技术,代理的方式提供了两种 1. 基于JDK的动态代理 * 必须是面向接口的,只有实现了具体接口的类才能生成代理对象 2. 基于CGLIB动态代理 *

面向切面编程(Aop)

无人久伴 提交于 2020-01-05 05:26:53
AOP中的概念   AOP(Aspect Orient Programming),也就是面向切面编程。可以这样理解,面向对象编程(OOP)是从静态角度考虑程序结构,面向切面编程(AOP)是从动态角度考虑程序运行过程。   AOP中的作用:常常通过 AOP 来处理一些具有横切性质的系统性服务,如事物管理、安全检查、缓存、对象池管理等,AOP 已经成为一种非常常用的解决方案。 AOP中的实现原理   如图:AOP 实际上是由目标类的代理类实现的。AOP 代理其实是由 AOP 框架动态生成的一个对象,该对象可作为目标对象使用。AOP 代理包含了目标对象的全部方法,但 AOP 代理中的方法与目标对象的方法存在差异,AOP 方法在特定切入点添加了增强处理,并回调了目标对象的方法。 Aspect(切面): 是通知和切入点的结合,通知和切入点共同定义了关于切面的全部内容---它的功能、在何时和何地完成其功能 joinpoint(连接点):所谓连接点是指那些被拦截到的点。在spring中,这些点指的是方法,因为spring只支持方法类型的连接点. Pointcut(切入点):所谓切入点是指我们要对那些joinpoint进行拦截的定义. 通知定义了切面的"什么"和"何时",切入点就定义了"何地". Advice(通知): 所谓通知是指拦截到joinpoint之后所要做的事情就是通知.通知分为前置通知

面向切面编程(AOP)

倖福魔咒の 提交于 2020-01-05 05:26:12
1.AOP的 简单理解   AOP全称:Aspect Oriented Programming;   面向切面编程是通过预编译方式和运行期 动态代理 的方式实现程序功能的 统一维护 的一种技术;   面向切面编程其实是凌驾于系统之上的一种设计思想, 该思想 不影响原始方法的调用;   能够进入切面中的必须与切入点表达式匹配,只有匹配才能进入切面中执行通知方法(特定的业务逻辑);   面向切面编程的思想是弥补了面向对象的不足; 扩展性特别的好;并且多个切面互不影响。      2.AOP和OOP两种思想   OOP(面向对象编程)是将一段业务处理过程的 实体及其行为和属性进行抽象封装 。从而可以实现单元划分和代码重用,以便提高效率。   AOP(面向切面编程)是针对某 一个特定的业务处理过程进行抽取形成一个切面 。也就是说AOP处理的是某个阶段或者说业务处理时的某个步骤。可以极大的降低模块之间的耦合性和达到了很好的隔离效果。   通俗点理解,OOP思想面对的是一个对象,而AOP面对的是业务的某个阶段或步骤; 如果几个或更多个的业务逻辑过程中,有重复的操作行为,就可以使用AOP提取出来,运用动态代理(JDK或CGLib),实现程序功能的统一维护。 就比如说需要事务,日志,权限等这些共有的特定业务逻辑时,需要将这些特定的业务逻辑进行抽取形成切面