切面

AOP

半城伤御伤魂 提交于 2019-12-02 11:48:14
一.AOP(面向切面编程) 在软件业,AOP为Aspect Oriented Programming的缩写,意为: 面向切面编程 , 通过 预编译 方式和运行期动态代理实现程序功能的统一维护的一种技术。 AOP是 OOP 的延续,是软件开发中的一个热点,也是 Spring 框架中的一个重要内容, 是 函数式编程 的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离, 从而使得业务逻辑各部分之间的 耦合度 降低,提高程序的可重用性,同时提高了开发的效率。 二.相关的基本概念: 切面(Aspect):一个模块化的横切逻辑(或称为横切关注点),可能会横切多个对象。 连接点(Join Point):程序执行中的某个具体的执行点。如上图中原对象的fun()就是一个连接点。 增强处理(Advice):切面在某个特定连接点上执行的代码逻辑。(有 前置增强、后置增强、环绕增强、异异常抛出增强、最终增强 等) 切入点(Pointcut):对连接点的特征进行描述,可以使用正则表达式,增强处理和一个切入点表达式相关联。 目标对象(Target object):被一个或多个切面增强的对象。 AOP代理(AOPproxy):由AOP框架所创建的对象,实现执行增强处理方法等功能。 织入(Weaving):将增强处理连接到应用程序中的类型或对象上的过程。 三.例子 架包 实体类 Dao层接口和实现类

AOP扩展

狂风中的少年 提交于 2019-12-02 11:41:41
一,AOP介绍 AOP含义:(Aspect Oriented Programming)是软件编程思想发展到一定阶段的产物,是对面向对象编程的有益补充。AOP一般适用于具有横切逻辑的场合,如访问控制,事务管理,性能监测等。 AOP概念: 切面(Aspect) :官方的抽象定义为“一个关注点的模块化,这个关注点可能会横切多个对象”。 连接点(Joinpoint) :程序执行过程中的某一行为。 增强处理(Advice) :“切面”对于某个“连接点”所产生的动作。 切入点(Pointcut) :匹配连接点的断言,在AOP中通知和一个切入点表达式关联。 目标对象(Target Object) :被一个或者多个切面所通知的对象。 AOP代理(AOP Proxy): 在Spring AOP中有两种代理方式,JDK动态代理和CGLIB代理。 织入(Weaving):将增强处理连接到应用程序中的类型或对象上的过程。 二,增强类型 前置增强(Before advice) :在某连接点(JoinPoint)之前执行的通知,但这个通知不能阻止连接点前的执行。ApplicationContext中在<aop:aspect>里面使用<aop:before>元素进行声明。 后置增强(After advice) :当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)

Spring AOP

此生再无相见时 提交于 2019-12-02 11:35:40
AOP面向切面编程 AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。OOP引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。不过OOP允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能。日志代码往往横向地散布在所有对象层次中,而与它对应的对象的核心功能毫无关系对于其他类型的代码,如安全性、异常处理和透明的持续性也都是如此,这种散布在各处的无关的代码被称为横切(cross cutting),在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。 AOP技术恰恰相反,它利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。 使用"横切"技术,AOP把软件系统分为两个部分: 核心关注点 和 横切关注点 。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处基本相似,比如权限认证、日志

Spring AOP详解

与世无争的帅哥 提交于 2019-12-02 11:34:39
AOP AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。OOP引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。不过OOP允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能。日志代码往往横向地散布在所有对象层次中,而与它对应的对象的核心功能毫无关系对于其他类型的代码,如安全性、异常处理和透明的持续性也都是如此,这种散布在各处的无关的代码被称为横切(cross cutting),在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。 AOP技术恰恰相反,它利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。 使用"横切"技术,AOP把软件系统分为两个部分: 核心关注点 和 横切关注点 。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处基本相似,比如权限认证、日志、事物

Spring学习

青春壹個敷衍的年華 提交于 2019-12-02 11:19:48
1、Spring是什么? Spring是一个基于IOC和AOP的结构J2EE系统的框架 ,Spring的核心是控制反转(IoC)和面向切面(AOP)。 applicationContext.xml,Spring核心配置文件。 2、IOC(反转控制) IOC 反转控制 是Spring的基础,Inversion Of Control ,简单说就是创建对象由以前的程序员自己new 构造方法来调用,变成了交由Spring创建对象,DI 依赖注入 Dependency Inject. 简单地说就是拿到的对象的属性,已经被注入好相关值了,直接使用即可。 2.1、通过spring获取Category对象,以及该对象被注入的name属性(Spring 可以创建实体类对象),以获取对象的方式来进行比较: 传统的方式: 通过new 关键字主动创建一个对象 IOC方式: 对象的生命周期由Spring来管理,直接从Spring那里去获取一个对象。 IOC是反转控制 (Inversion Of Control)的缩写,就像控制权从本来在自己手里,交给了Spring。 3、AOP(面向切面编程) AOP 即 Aspect Oriented Program 面向切面编程 ,首先,在面向切面编程的思想里面,把功能分为核心业务功能,和周边功能。 所谓的核心业务,比如登陆,增加数据,删除数据都叫核心业务

第06章 AOP XML

强颜欢笑 提交于 2019-12-02 05:47:24
第06章 以XML方式配置切面 1.概述 除了使用AspectJ注解声明切面,Spring也支持在bean配置文件中声明切面。这种声明是通过aop名称空间中的XML元素完成的。 正常情况下,基于注解的声明要优先于基于XML的声明。通过AspectJ注解,切面可以与AspectJ兼容,而基于XML的配置则是Spring专有的。由于AspectJ得到越来越多的 AOP框架支持,所以以注解风格编写的切面将会有更多重用的机会。 2. 配置细节 在bean配置文件中,所有的Spring AOP配置都必须定义在<aop:config>元素内部。对于每个切面而言,都要创建一个<aop:aspect>元素来为具体的切面实现引用后端bean实例。 切面bean必须有一个标识符,供<aop:aspect>元素引用。 3. 声明切入点 切入点使用<aop:pointcut>元素声明。 切入点必须定义在<aop:aspect>元素下,或者直接定义在<aop:config>元素下。 定义在<aop:aspect>元素下:只对当前切面有效 定义在<aop:config>元素下:对所有切面都有效 基于XML的AOP配置不允许在切入点表达式中用名称引用其他切入点。 4. 声明通知 在aop名称空间中,每种通知类型都对应一个特定的XML元素。 通知元素需要使用<pointcut-ref>来引用切入点,或用

第04章 AOP概述

我们两清 提交于 2019-12-02 05:41:56
第04章 AOP概述 1.AOP概述 ●AOP(Aspect-Oriented Programming, 面向切面编程 ):是一种新的方法论,是对传统 OOP(Object-Oriented Programming,面向对象编程)的补充。 ●AOP编程操作的主要对象是切面(aspect),而切面 模块化横切关注点 。 ●在应用AOP编程时,仍然需要定义公共功能,但可以明确的定义这个功能应用在哪里,以什么方式应用,并且不必修改受影响的类。这样一来横切关注点就被模块化到特殊的类里——这样的类我们通常称之为"切面"。 ●AOP的好处: ○每个事物逻辑位于一个位置,代码不分散,便于维护和升级 ○业务模块更简洁,只包含核心业务代码 2. AOP术语 横切关注点 从每个方法中抽取出来的同一类非核心业务。 切面(Aspect) 封装横切关注点信息的类,每个关注点体现为一个通知方法。 通知(Advice) 切面必须要完成的各个具体工作 目标(Target) 被通知的对象 代理(Proxy) 向目标对象应用通知之后创建的代理对象 连接点(Joinpoint) 横切关注点在程序代码中的具体体现,对应程序执行的某个特定位置。例如:类某个方法调用前、调用后、方法捕获到异常后等。 在应用程序中可以使用横纵两个坐标来定位一个具体的连接点: 切入点(pointcut): 定位连接点的方式

超详细回答:Spring常见面试题总结

元气小坏坏 提交于 2019-12-02 02:17:27
1、Spring是什么?   Spring是一个轻量级的IoC和AOP容器框架。是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求。常见的配置方式有三种:基于XML的配置、基于注解的配置、基于Java的配置。 主要由以下几个模块组成: Spring Core:核心类库,提供IOC服务; Spring Context:提供框架式的Bean访问方式,以及企业级功能(JNDI、定时任务等); Spring AOP:AOP服务; Spring DAO:对JDBC的抽象,简化了数据访问异常的处理; Spring ORM:对现有的ORM框架的支持; Spring Web:提供了基本的面向Web的综合特性,例如多方文件上传; Spring MVC:提供面向Web应用的Model-View-Controller实现。 2、Spring 的优点? (1)spring属于低侵入式设计,代码的污染极低; (2)spring的DI机制将对象之间的依赖关系交由框架处理,减低组件的耦合性; (3)Spring提供了AOP技术,支持将一些通用任务,如安全、事务、日志、权限等进行集中式管理,从而提供更好的复用。 (4)spring对于主流的应用框架提供了集成支持。 3、Spring的AOP理解:   OOP面向对象,允许开发者定义纵向的关系

面向切面编程——理论

丶灬走出姿态 提交于 2019-12-01 19:55:50
在传统的编写业务逻辑处理代码时,我们通常会习惯性地做几件事情:日志记录、事务控制及 权限控制等,然后才是编写核心的业务逻辑处理代码。当代码编写完成回头再看时,不禁发现,扬扬洒洒上百行代码中,真正用于核心业务逻辑处理才那么几行,如 图6-4所示。方法复方法,类复类,就这样子带着无可奈何遗憾地度过了多少个春秋。这倒也罢,倘若到了项目的尾声,突然决定在权限控制上需要进行大的变动 时,成千上万个方法又得一一"登门拜访",痛苦"雪上加霜"。 如果能把图6-4中众多方法中的所有共有代码全部抽取出来,放置到某个地方集中管理,然后在具体运行时,再由容器动态织入这些共有代码的话,最起码可以解决两个问题: Java EE程序员在编写具体的业务逻辑处理方法时,只需关心核心的业务逻辑处理,既提高了工作效率,又使代码变更简洁优雅。 在日后的维护中由于业务逻辑代码与共有代码分开存放,而且共有代码是集中存放的,因此使维护工作变得简单轻松。 面向切面编程AOP技术就是为解决这个问题而诞生的,切面就是横切面,如图6-5所示,代表的是一个普遍存在的共有功能,例如,日志切面、权限切面及事务切面等。 下面我们以用户管理业务逻辑组件UserService的AOP实现过程(见图6-6)为例,深度剖析一下AOP技术的实现原理。AOP技术是建立 在Java语言的反射机制与动态代理机制之上的。业务逻辑组件在运行过程中

对Spring的理解,项目中都用什么?怎么用的?对IOC、和AOP的理解及实现原理

蹲街弑〆低调 提交于 2019-12-01 16:16:47
Spring是一个开源框架,处于MVC模式中的控制层,它能应对需求快速的变化,其主要原因它有一种面向切面编程(AOP)的优势,其次它提升了系统性能,因为通过依赖倒置机制(IOC),系统中用到的对象不是在系统加载时就全部实例化,而是在调用到这个类时才会实例化该类的对象,从而提升了系统性能。这两个优秀的性能使得Spring受到许多J2EE公司的青睐,如阿里里中使用最多的也是Spring相关技术。 Spring的优点: 1、降低了组件之间的耦合性,实现了软件各层之间的解耦。 2、可以使用容易提供的众多服务,如事务管理,消息服务,日志记录等。 3、容器提供了AOP技术,利用它很容易实现如权限拦截、运行期监控等功能。 Spring中AOP技术是设计模式中的动态代理模式。只需实现jdk提供的动态代理接口InvocationHandler,所有被代理对象的方法都由InvocationHandler接管实际的处理任务。面向切面编程中还要理解切入点、切面、通知、织入等概念。 来源: https://www.cnblogs.com/u013533289/p/11692429.html