切面

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基础3

蹲街弑〆低调 提交于 2020-01-05 05:31:41
一、AOP   1)AOP简介:     Aspect Oriented Programming,面向切面编程     通过预编译方式和动态代理实现程序功能的一种技术,AOP是OOP的延续,是函数式编程的一种衍生范例。利用AOP可以对业务逻辑各个部分进行隔离,从而使得业务逻辑之间的耦合度降低,提高程序的可重用性,同时提高开发效率。     AOP采用横向抽取机制取代了传统纵向继承,不破坏原有的类,生成一个动态代理类,在原有类的基础上进行增强,可以随时添加,随时取消功能。     Spring中使用的AOP是Aspectj 二、动态代理   1)JDK动态代理,依赖接口         package com.ual.dao; public class GoodsDaoImpl implements GoodsDao { @Override public void save() { System.out.println("保存"); } @Override public void update() { System.out.println("更新"); } } package com.ual.Proxy; import com.ual.dao.GoodsDao; import java.lang.reflect.InvocationHandler; import java.lang

Spring AOP

半城伤御伤魂 提交于 2020-01-05 05:29:51
1.Spring AOP 中的基本概念 a.连接点( Joinpoint ) 在程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候。在Spring AOP中,一个连接点 总是 表示一个方法的执行。 通俗讲: 层于层之间调用的过程中,目标层中可供调用的方法,就称之为连接点。 b. 切入点( Pointcut ) 匹配连接点的断言。通知和一个切入点表达式关联,并在满足这个切入点的连接点上运行(例如,当执行某个特定名称的方法时)。切入点表达式如何和连接点匹配是AOP的核心:Spring缺省使用AspectJ切入点语法。 通俗讲: 在连接点的基础上 增加上切入规则 选择出需要进行增强的切入点 这些基于切入规则选出来的连接点 就称之为切入点。 c.切面( Aspect ) 一个关注点的模块化,这个关注点可能会横切多个对象。事务管理是J2EE应用中一个关于横切关注点的很好的例子。在Spring AOP中,切面可以使用 基于模式 )或者基于 @Aspect注解 的方式来实现。 通俗讲: 狭义上就是 当spring拦截下切入点后 讲这些切入点 交给 处理类 进行功能的增强,这个处理类就称之为切面。 广义上来讲 讲 spring底层的代理 切入点 和 处理类 加在一起 实现的 对层与层之间调用过程进行增强的机制 称之为切面。 d.通知( Advice )

Spring AOP基本概念

℡╲_俬逩灬. 提交于 2020-01-05 05:29:27
/*--> */ /*--> */ Spring AOP基本概念 目录 Spring AOP定义 AOP基本术语 通知类型 AOP定义 AOP基本术语 切面( Aspect ):一个能横切多个对象的模块化的关注点。对Spring AOP来说,切面就是普通的类(基于模式)或使用 @Aspect 注解的类。 连接点( Joint Point ):程序执行过程中的某个点。对Spring AOP来说,连接点就是方法的执行。 通知( Advice ):切面在某个连接点上执行的动作。 切入点( PointCut ):匹配连接点的断言。 引入( Introduction ):为现有类型添加额外的方法或域。 目标对象( Target object ):被一个或多个切面通知的对象,也称为 被通知对象 。因为Spring AOP由运行时代理实现,所以该对象总是一个被代理对象。 AOP代理( AOP proxy ):为了实现切面契约(通知方法执行等),而由AOP框架创建的对象。在Spring框架中,AOP代理可以用JDK动态代理或CGLIB代理实现。 织入( Weaving ):将切面与其他应用类型或对象连接起来,并创建被通知对象。Spring AOP在运行时执行织入操作。 通知类型 前置通知( Before Advice ):在连接点之前执行的通知,它不会阻止连接点之前的执行流程(除非抛出异常)。

Spring-05 -AOP [面向切面编程] -Schema-based 实现aop的步骤

北战南征 提交于 2020-01-05 05:29:17
一 .AOP [ 知识点详解 ] AOP:中文名称面向切面编程 英文名称:(Aspect Oriented Programming) 正常程序执行流程都是纵向执行流程 3.1 又叫面向切面编程,在原有纵向执行流程中添加横切面 3.2 不需要修改原有程序代码 3.2.1 高扩展性 3.2.2 原有功能相当于释放了部分逻辑.让职责更加明确. 面向切面编程是什么? 4.1 在程序原有纵向执行流程中,针对某一个或某一些方法添加通知,形成横切面过程就叫做面向切面编程. 常用概念 5.1 原有功能: 切点, pointcut 5.2 前置通知: 在切点之前执行的功能. before advice 5.3 后置通知: 在切点之后执行的功能, after advice 5.4 如果切点执行过程中出现异常,会触发异常通知.throws advice 5.5 所有功能总称叫做切面. 5.6 织入: 把切面嵌入到原有功能的过程叫做织入 5.6.1 spring 提供了 2 种AOP 实现方式 5.6.2 Schema-based 5.6.3 每个通知都需要实现接口或类 5.6.4 配置spring 配置文件时在<aop:config>配置 5.6.5 AspectJ 5.6.6 每个通知不需要实现接口或类 5.6.7 配置spring 配置文件是在<aop:config>的子标签 ,<aop

面向切面编程(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),实现程序功能的统一维护。 就比如说需要事务,日志,权限等这些共有的特定业务逻辑时,需要将这些特定的业务逻辑进行抽取形成切面

手写Spring事务框架,阿里架构师一文详解Spring-SpringAOP原理

筅森魡賤 提交于 2020-01-03 17:38:29
本文转载自: 手写Spring事务框架,阿里架构师一文详解Spring-SpringAOP原理 一、Spring核心知识 Spring是一个开源框架,Spring是于2003年兴起的一个轻量级的Java开发框架,由Rod Johnson在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为J2EE应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Spring的核心是控制反转(IoC)和面向切面(AOP)。简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式)轻量级开源框架。 为什么说Spring是一个一站式的轻量级开源框架呢?EE开发可分成三层架构,针对JavaEE的三层结构,每一层Spring都提供了不同的解决技术。 WEB层:SpringMVC 业务层:Spring的IoC 持久层:Spring的JDBCTemplate(Spring的JDBC模板

让我们面向切面吧~大话开篇

随声附和 提交于 2020-01-03 01:08:53
首先,感谢一下张逸老师,从他的文章中学到了很多面向对象和面向方面的知识。 AOP(Aspect-Oriented Programming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需 要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系。例如日志功能。日 志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。对于其他类型的代码,如安全性、异常处理和透明的持续性也是如此。这种 散布在各处的无关的代码被称为横切(cross-cutting)代码,在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。 而AOP技术则恰恰相反,它利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为 “Aspect”,即方面。所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低 模块间的耦合度,并有利于未来的可操作性和可维护性。AOP代表的是一个横向的关系,如果说“对象”是一个空心的圆柱体

Spring注解式AOP面向切面编程.

无人久伴 提交于 2020-01-02 21:06:53
1、AOP指在程序运行期间动态的将某段代码切入到指定方法指定位置进行运行的编程方式。aop底层是动态代理。 1 package com.bie.config; 2 3 import org.aspectj.lang.annotation.Aspect; 4 import org.springframework.context.annotation.Bean; 5 import org.springframework.context.annotation.Configuration; 6 import org.springframework.context.annotation.EnableAspectJAutoProxy; 7 8 import com.bie.aop.LogAspect; 9 import com.bie.aop.MathCalculator; 10 11 /** 12 * 13 * 14 * @Title: SpringApplicationConfig.java 15 * @Package com.bie.config 16 * @Description: TODO 17 * @author biehl 18 * @date 2019年12月9日 19 * @version V1.0 20 * 21 * 22 * 1