Spring_面向切面(AOP)基础

努力不一定成功;但是放弃必定会失败。

面向切面编程

  在软件开发中,散布于应用中多处的功能称为横切关注点。通常来讲,这些横切关注点从概念上是与应用的业务逻辑相分离的(但是往往会直接嵌入到应用的业务逻辑之中)。把这些横切关注点与业务逻辑分离正是面向切面编程(AOP)所要解决的问题。

  如果要重用功能的话,最常见的面向对象技术是继承(inheritance)或委托(delegation)。但是,如果在整个应用中都使用相同的基类,继承往往会导致一个脆弱的对象体系;而使用委托可能需要对委托对象进行复杂的调用。

  切面提供了取代继承和委托的另一种可选方案。在使用面向切面编程时,我们仍然在同一地方定义通用功能,但是可以通过声明的方式定义这个功能要以何种方式在何处使用,而无需修改受影响的类。横切关注点可以被模块化为特殊的类,这些类被称为切面(aspect)。

AOP术语

1.通知(Advice)

  通知定义了切面是什么以及何时使用。

  Spring切面有5中类型的通知:

  1)前置通知(Before):在目标方法被调用之前调用通知功能;

  2)后置通知(After):在目标方法完成之后调用通知,此时不会关心方法的输出是什么;

  3)返回通知(After-returning):在目标方法成功执行之后调用通知;

  4)异常通知(After-throwing):在目标方法抛出异常之后调用通知;

  5)环绕通知(Around):通知包裹了被通知的方法,在被通知的方法调用之前和调用之后执行自定义的行为。

2.连接点(Join point)

  连接点是在应用执行过程中能够插入切面的一个点,这个点可以使调用方法时、抛出异常时、甚至修改一个字段时,切面代码可以利用这些点插入到应用的正常流程之中,并添加新的行为。

3.切点(PoinCut)

  切点定义了何处,切点的定义会匹配通知所要织入的一个或多个连接点。我们通常使用明确的类和方法名称,或是利用正则表达式定义所匹配的类和方法名称来指定这些切点。

4.切面(Aspect)

  切面是通知和切点的结合。通知和切点共同定义了切面的全部内容:它是什么,在何时和何处完成其功能。

5.引入(Introduction)

  引入允许我们在无需修改这些现有类的情况下,向现有的类添加新方法或属性,让它们具有新的行为和状态。

6.织入(Weaving)

  织入是把切面应用到目标对象并创建新的代理对象的过程。切面在指定的连接点被织入到目标对象中。

  在目标对象的生命周期中有多个点可以织入:

  1)编译期:切面在目标类编译时被织入。这种方式需要特殊的编译器。AspectJ的织入编译器就是以这种方式织入切面。

  2)类加载期:切面在目标类加载到JVM时被织入。这种方式需要特殊的类加载器(ClassLoader),它可以在目标类被引入应用之前增强该目标类的字节码。

  3)运行期:切面在应用运行的某个时刻被织入。一般情况下,在织入切面时,AOP容器会为目标对象动态创建一个代理对象。

原文地址:https://www.cnblogs.com/dandelZH/p/8878067.html

时间: 2024-07-31 07:32:25

Spring_面向切面(AOP)基础的相关文章

Spring基础(二)_面向切面(AOP)

面向切面编程 面向切面编程[AOP,Aspect Oriented Programming]:通过预编译方式和运行期间动态代理实现程序功能的统一维护的技术.AOP 是 Spring 框架中的一个重要内容,利用 AOP 可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率. 在 Spring 中,依赖注入管理和配置应用对象,有助于应用对象之间的解耦.而面向切面编程可以实现横切关注点与它们所影响的对象之间的解耦. 横切关注点:散布在应用中

Spring框架使用(控制反转,依赖注入,面向切面AOP)

参见:http://blog.csdn.net/fei641327936/article/details/52015121 Mybatis: 实现IOC的轻量级的一个Bean的容器 Inversion of control 控制反转:由容器控制程序之间的关系,不是程序代码操作 Depend Inject 依赖注入 Aspect oriented programming 面向切面编程 Spring能帮助我们根据配置文件创建及组装对象之间的依赖关系: Spring面向切面编程能帮助我们无耦合的实现日

解析Spring第三天(面向切面AOP)

面向切面:AOP 在不修改源代码的基础上,对方法进行增强.AOP的底层原理就是代理技术(第一种:jdk的动态代理(编写程序必须要有接口).第二种:cglib代理技术(生成类的子类).如果编写的程序有借口,则spring框架会自动使用jdk的动态代理技术增强,). Joinpoint(连接点) 所谓连接点是指那些被拦截到的点.在spring中,这些点指的是方法,因为spring只支持方法类型的连接点 Pointcut(切入点) -- 所谓切入点是指我们要对哪些Joinpoint进行拦截的定义 Ad

Spring4面向切面AOP

AOP(Aspect Oriented Programming)面向切面编程,通过预编译方式和运行期动态代理实现程序功能的横向多模块统一控制的一种技术.AOP是OOP的补充,是spring框架中的一个重要内容.利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率.AOP可以分为静态织入与动态织入,静态织入即在编译前将需织入内容写入目标模块中,这样成本非常高.动态织入则不需要改变目标模块.Spring框架实现了AOP,使用注解

spring面向切面aop拦截器

spring中有很多概念和名词,其中有一些名字不同,但是从功能上来看总感觉是那么的相似,比如过滤器.拦截器.aop等. 过滤器filter.spring mvc拦截器Interceptor .面向切面编程aop,实际上都具有一定的拦截作用,都是拦截住某一个面,然后进行一定的处理. 在这里主要想着手的是aop,至于他们的比较,我想等三个都一一了解完了再说,因此这里便不做过多的比较. 在我目前的项目实践中,只在一个地方手动显示的使用了aop,那便是日志管理中对部分重要操作的记录. 据我目前所知,ao

Spring学习1_面向切面( AOP )实现原理

面向切面编程 (Aspect Oriented Programming,简称AOP) 是Spring的一个重要特性,其原理是采用动态代理方式实现. 下面通过一个Demo来模拟AOP实现 整个代码目录结构如下: 其中LogInterceptor类完成为所有Service方法添加日志记录的功能. 1.Dao层实现 package com.dao; public class UserDaoImpl implements UserDao { @Override public void save() {

Spring面向切面(AOP)

AOP称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志.事务.权限等,Struts2的拦截器设计就是基于AOP的思想. AOP的基本概念 Aspect(切面):通常是一个类,里面可以定义切入点和通知 JointPoint(连接点):程序执行过程中明确的点,一般是方法的调用. Advice(通知):AOP在特定的切入点上执行的增强处理,有before.after.afterReturning.afterThrowing.around Pointcut(切入点):AOP框架创

Puzzle 面向切面AOP开发框架 For .Net

AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果. 日常的产品开发中最常见的就是数据保存的功能.举例来说,现在有个用户信息数据保存的功能,我们希望在数据保存前对数据进行校验,其中现在能想到的校验就包含数据完整性校验和相同数据是否存在校验.按照传统的OOP(面向对象程序设计),我们需要定义一个IUserDataSaveService(用户数据保存服务接口)以及对应的UserDataSaveServiceIm

(语法基础)浅谈面向切面编程(AOP)

一:前言 面向切面编程是一个很重要的思想概念,想要写出一个便于维护的程序,理解AOP并且能熟练的在实际编程中合理的运用AOP思想是很有必要的 二:AOP的基本概念 基础概念:AOP中文翻译面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术. 三:通过动态代理实现AOP 读完上面的概念,也许还不知道什么是AOP,但是我们只少能从上面概念知道实现AOP的技术基础是预编译方式和运行期动态代理,那么我们就来通过实际代码用动态代理来实现一个简单的程序吧 我们在日常的面向对象编程中