`
handsome224521
  • 浏览: 15967 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
最近访客 更多访客>>
社区版块
存档分类
最新评论

再学Spring Aop 原理

阅读更多
再学AOP
概念:
切面(aspect):一个关注点的模块化,这个关注点可能会横切多个对象。

连接点:Joinpoint:在程序执行过程中某个特定的点,一个连接点总是代表一个方法的执行。通过声明使(advice)通知的主体部分获得连接

点的信息。

通知(advice)在某个特定的连接点上执行的动作。许多aop框架包括spring都是以拦截器做通知的模型的,并维护一个以连接点为中心的拦截

器链。

切入点(Pointcut):匹配连接点的断言。
引入(Introduction):声明额外的方法或者麽各类型的字段,spring允许引入新的接口到任何被代理的对象。通过使用一个引入来使bean实

现IsModify接口,以简便缓存机制。

目标对象(Target Object):被一个或者多个切面所通知的对象

Aop代理(AOPProxy):Aop框架创建的对象,用来实现切面契约(aspect contract)包括通知方法执行等功能。spring中是JDK动态代理。或

者是CGLIB代理spring2.0最新引入的基于模式(schema-based)风格和AspectJ注解风格的切面声明,对与使用这些风格的用户来说,代理的创

建使的

织入(Weaving):把切面连接到其他的应用程序类型或者对象上,并创建一个通知的对象,

前置通知:在连接点之前执行的通知,但这个通知不能阻止连接点前的执行

返回后通知:在连接点正常完成后执行的通知

抛出异常后的通知:在方法抛出异常退出时执行的通知。

后通知:当某连接退出的时候执行的通知。

环绕通知:包围一个连接点的通知。

注意:尽量使用最简单的通知类型来实现需要的功能,用合适的通知类型会使编程变得简单,并且能够避免很多潜在的错误。

切入点和连接点匹配的概念是AOP的关键,这使得AOP不同于其他仅仅提

供拦截功能的旧技术。

AOP的功能和目标
上面简单的说了一些Aop的概念,进来有看了一下,感觉应该继续写下去,继续写一下它的功能和目标吧:
Spring AOP用纯Java实现。它不需要专门的编译过程。Spring AOP不需要控制类装载器层次,因此它适用于J2EE web容器或应用服务器,

Spring目前仅支持使用方法调用作为连接点(join point)虽可以加入对成员变量拦截器支持,但Spring并没有实现成员变量拦截器。Spring

并不是要尝试提供最完整的AOP实现(尽管Spring AOP有这个能力), 相反的,它其实侧重于提供一种AOP实现和Spring IoC容器的整合,用于

帮助解决在企业级开发中的常见问题。因此,它通常都和IoC容器一起使用。与其他AOP实现相比这是一个显著的区别。有些事使用Spring AOP

是无法轻松或者高效的完成的,比如说通知一个细粒度的对象。事实证明只要适合AOP来解决的,Spring AOP都没有问题,Spring AOP提供了一

个非常好的解决方案。而且spring从不去竞争哪个框架,而是去包容她,互补她。呵呵是不是一个最完美的情人....不爱她你还爱谁?
下一次我准备再看看AOP的代理机制吧
分享到:
评论
6 楼 handsome224521 2008-04-29  
补充一句:AOP的代理默认使用的是JDK代理。当然Aop的事件机制里也是和JDK中的事件机制是同样的原理。只不过是通过代理的方式来实现JDK的代理罢了。
5 楼 handsome224521 2008-04-29  
楼下兄弟不知为何这样问:真不知怎么回答。我认为AOP和事件机制是没办法比较的。就像我问你OO和和多态的区别一样。他们没有可比性的。首先AOP是一种思想,一种模式,而他会用到事件机制来实现一些功能,但不能说用到了他就有他的特点,甚至认为就是它。我相信你说的是AOP中的事件和普通的java Event的区别吧。实际上:
ApplicationContext中的事件处理是通过ApplicationEvent类和ApplicationListener接口来提供的。如果在上下文中部署一个实现了ApplicationListener接口的bean,那么每当一个ApplicationEvent发布到ApplicationContext时,这个bean就得到通知。实质上,这是标准的Observer设计模式。Spring提供了三个标准事件:ContextRefreshedEvent 、ContextClosedEvent、RequestHandledEvent 同样你也是可以自定义事件的仅仅是简单地调用ApplicationContext的publishEvent()方法。
至于java的事件也就是包括事件状态、事件原型、事件源对象和事件订阅对象几个部分组成。Java 要求订阅者提供一个实现了特定事件原型接口的对象。有关事件的更多细节,可以查看 SDK 文档。
不知道有没回答到你。或者使你明白。呵呵
4 楼 KKFC 2008-04-29  
敢问一句,AOP与事件机制Event有没有相同的地方,和不同的地方?
3 楼 绝对可能 2008-04-29  
本人功力尚浅,友情顶帖……
2 楼 handsome224521 2008-04-29  
的确如此
Spring目前仅支持使用方法调用作为连接点。
虽然可以在不影响到Spring AOP核心API的情况下加入对成员变量拦截器支持,但Spring并没有实现成员变量拦截器。 如果你需要把对成员变量的访问和更新也作为通知的连接点,可以考虑其它语法的Java语言,例如AspectJ。
就像楼上你说的那样。
但是这正是我要说明的啊。spring正是包容其他比较好的东西。这样也体现了开源的强大。人家已经又好用的了,没必要再高一些重复的,大家应该花时间在一些有必要的地方。呵呵
1 楼 likeblood 2008-04-28  
动态代理和cglib只能是通过对象调用方法时能被拦截,方法内部调用就没办法了,远不如aspectj那样的weaven方式,因此spring也只能去集成aspectj来解决

相关推荐

    Spring AOP面向方面编程原理:AOP概念

    ### Spring AOP面向方面编程原理:AOP概念详解 #### 一、引言 随着软件系统的日益复杂,传统的面向对象编程(OOP)...对于希望深入了解Spring AOP原理与实践的读者来说,掌握以上概念将是开启面向方面编程之旅的第一步。

    简单spring aop 例子

    本示例将简要介绍如何在Spring应用中实现AOP,通过实际的代码示例帮助理解其工作原理。 首先,我们要理解AOP的核心概念。AOP是一种编程范式,它允许开发者定义“切面”(Aspects),这些切面封装了特定的关注点,如...

    Spring_AOP_学习小结 Spring_AOP_学习小结 Spring_AOP_学习小结

    本篇文章将详细阐述Spring AOP的基本概念、种类、代理原理、通知类型以及切入点,帮助你深入理解这一强大的编程模式。 一、AOP概念 1. Joinpoint(连接点):在Spring AOP中,Joinpoint指的是程序执行的某个特定点...

    spring aop 自定义注解保存操作日志到mysql数据库 源码

    一、适合人群 1、具备一定Java编程基础,初级开发者 ...(需要知道原理的请看spring aop源码,此处不做赘述) 3、可在现有源码上快速进行功能扩展 4、spring boot,mybatis,druid,spring aop的使用

    spring aop 学习笔记

    本学习笔记将深入探讨Spring AOP的核心概念、工作原理以及实际应用。 1. **核心概念** - **切面(Aspect)**:切面是关注点的模块化,包含业务逻辑之外的横切关注点,如日志、事务管理。 - **连接点(Join Point...

    Spring AOP学习资料(pdf)

    #### 二、AOP 的基本原理与模式 **1. 核心需求与系统需求** - **核心需求**:指业务逻辑中必须实现的功能,例如用户登录、数据查询等。 - **系统需求**:包括但不限于日志记录、安全控制、事务管理等非功能性需求。...

    SpringAOP的例子

    在这个"SpringAOP的例子"中,我们将深入探讨如何在Eclipse环境下利用Spring AOP和动态代理来实现这些功能。 首先,让我们理解什么是AOP。AOP是一种编程范式,旨在减少代码的重复性和增强可维护性。在传统的OOP中,...

    spring aop 附带测试实例

    在提供的压缩包文件"springAOP"中,可能包含了以下内容: - **切面类(Aspect Class)**:包含切点和通知的Java类,可能使用了`@Aspect`注解。 - **目标类(Target Class)**:被AOP代理的对象,通常包含业务逻辑。...

    spring aop

    Spring AOP,全称为Aspect-Oriented Programming(面向切面编程),是Spring框架的重要...通过学习这个项目,你可以深入理解Spring AOP的工作原理,以及如何在实际项目中有效地利用它来提升代码的复用性和可维护性。

    第3章 Spring AOP.ppt

    理解和掌握AOP的概念及其在Spring框架中的实现方式,包括基于XML和注解的配置方式,以及JDK动态代理和CGLIB代理的原理和使用。通过学习,应能独立实现AOP相关的功能,提升代码的可扩展性和可维护性。

    springaop

    标题 "springaop" 暗示我们关注的是Spring框架中的AOP(面向切面编程)模块。在Spring框架中,AOP是一种强大的工具,它允许程序员定义“切面”,这些切面可以封装横切关注点,如日志、事务管理、性能监控等,将它们...

    spring AOP实例代码(带详细的讲解)

    首先,了解AOP的基本理念是理解其工作原理的关键。AOP是一种编程范式,旨在减少代码重复,提高可维护性和可读性。在传统面向对象编程中,我们通常在多个类或方法中重复编写相同的代码(如日志、异常处理)。AOP允许...

    spring aop实例

    在实践中,你可以通过修改源代码,尝试不同的切点和通知类型,以便更深入地了解Spring AOP的工作原理。同时,结合文档中的理论知识,将有助于你形成完整的理解。 总之,Spring AOP是Spring框架中不可或缺的一部分,...

    SpringAop学习笔记以及实现Demo

    通过这些示例,你可以深入理解Spring AOP的工作原理,掌握其配置和使用方式,从而在实际项目中灵活地应用切面编程,提高代码的可维护性和可复用性。 请注意,这个压缩包可能包含相关的代码文件、配置文件和文档,...

    SpringAop实例

    在这个"SpringAop实例"中,可能包含了演示如何创建和使用这两种配置方式的代码示例。文件列表中的"spring32"可能是指Spring 3.2版本的相关文件,这个版本的Spring对AOP的支持已经相当成熟。 通过学习这个实例,你...

    spring AOP myeclipse 完整代码

    通过查看和运行这些代码,你可以更深入地理解Spring AOP的工作原理和使用方式。 总结来说,Spring AOP是Spring框架提供的一个强大功能,它使得我们可以更优雅地处理系统中的横切关注点,提高代码的可读性和可维护性...

    Spring Aop demo

    1. **AOP概念**:解释AOP的基本原理,包括切面、通知(Advice)、切入点(Pointcut)、织入(Weaving)等核心概念。 2. **Spring AOP支持**:介绍Spring如何通过代理模式实现AOP,包括JDK动态代理和CGLIB代理的差异...

    SpringAOP之探秘(动态代理、责任链模式、注解使用)

    学习这些示例,你可以更深入地理解Spring AOP的工作原理,掌握如何使用动态代理和责任链模式来编写切面,以及如何通过注解简化AOP的配置和使用。这些知识对于任何涉及Spring框架的开发者来说都是至关重要的,因为...

    用xml配置的方式进行SpringAOP开发

    不过,理解XML配置方式有助于深入理解Spring AOP的底层原理。 总的来说,Spring AOP通过XML配置为我们提供了一种灵活的方式来管理横切关注点,使我们的代码更加模块化和可维护。通过定义Advisor、切点和通知,我们...

    SpringAOP测试Demo

    在"SpringAOP测试Demo"中,我们通常会涉及以下几个核心概念和操作: 1. **切面(Aspect)**:切面是关注点的一个模块化,它包括了连接点、通知、目标对象、织入和引入。在Spring AOP中,切面通常由一个或多个注解的...

Global site tag (gtag.js) - Google Analytics