`
有崖生110
  • 浏览: 55430 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

AOP简单理解

 
阅读更多

 AOP是OOP的延续,是(Aspect Oriented Programming)的缩写,意思是面向切面(方面)编程,是目前软件开发中的一个热点,也是Spring框架中的一个重要内容。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。


  主要的功能是:日志记录,性能统计,安全控制,事务处理,异常处理等等。

  主要的意图是:将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。

  可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现。


将通用需求功能从不相关类之中分离出来;同时,能够使得很多类共享一个行为,一旦行为发生变化,不必修改很多类,只要修改这个行为就可以。

   AOP就是这种实现分散关注的编程方法,它将“关注”封装在“方面”中。AOP 是一个概念,一个规范,本身并没有设定具体语言的实现


OOP(面向对象编程)针对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加清晰高效的逻辑单元划分。而AOP则是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。这两种设计思想在目标上有着本质的差异。

OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系。例如日志功能。日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。对于其他类型的代码,如安全性、异常处理和透明的持续性也是如此。这种散布在各处的无关的代码被称为横切(cross-cutting)代码,在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。


而AOP技术则恰恰相反,它利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为“Aspect”,即方面。所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。AOP代表的是一个横向的关系,如果说“对象”是一个空心的圆柱体,其中封装的是对象的属性和行为;那么面向方面编程的方法,就仿佛一把利刃,将这些空心圆柱体剖开,以获得其内部的消息。而剖开的切面,也就是所谓的“方面”了。然后它又以巧夺天功的妙手将这些剖开的切面复原,不留痕迹。



实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。然而殊途同归,实现AOP的技术特性却是相同的,分别为:


1、join point(连接点):是程序执行中的一个精确执行点,例如类中的一个方法。它是一个抽象的概念,在实现AOP时,并不需要去定义一个join point。

2、point cut(切入点):本质上是一个捕获连接点的结构。在AOP中,可以定义一个point cut,来捕获相关方法的调用。

3、advice(通知):是point cut的执行代码,是执行“方面”的具体逻辑。

4、aspect(方面):point cut和advice结合起来就是aspect,它类似于OOP中定义的一个类,但它代表的更多是对象间横向的关系。

5、introduce(引入):为对象引入附加的方法或属性,从而达到修改对象结构的目的。有的AOP工具又将其称为mixin。


上述的技术特性组成了基本的AOP技术,大多数AOP工具均实现了这些技术。它们也可以是研究AOP技术的基本术语。


AOP应用:


很明显,AOP非常适合开发J2EE容器服务器,目前JBoss 4.0正是使用AOP框架进行开发。

  具体功能如下:

  Authentication 权限

  Caching 缓存

  Context passing 内容传递

  Error handling 错误处理

  Lazy loading 延时加载

  Debugging 调试

  logging, tracing, profiling and monitoring 记录跟踪 优化 校准

  Performance optimization 性能优化

  Persistence 持久化

  Resource pooling 资源池

  Synchronization 同步

  Transactions 事务



分享到:
评论

相关推荐

    spring的aop简单例子

    这个简单例子将帮助我们理解AOP的基本概念和如何在Spring框架中实现它。 首先,我们要知道AOP的核心概念:切面、通知、连接点、切点、目标对象和代理。切面是包含横切关注点(如日志记录、事务管理等)的模块化组件...

    Sping aop简单示例

    在这个"Spring AOP简单示例"中,我们将深入探讨这五个关键元素,并通过XML配置来实现它们。 首先,**切面(Aspect)**是关注点的模块化,这些关注点定义了跨越多个对象的行为或责任。在Spring AOP中,切面可以是...

    简单spring aop 例子

    现在,我们来看如何创建一个简单的Spring AOP例子: 1. **定义切面(Aspect)**:切面是包含通知(Advice)和切入点(Pointcut)的类。通知定义了要执行的逻辑,切入点定义了何时执行。例如,我们可以创建一个名为`...

    SpringAop的简单理解.pdf

    SpringAOP(面向切面编程)是Spring框架的一个关键组件,它允许开发者通过定义切面来统一处理横切关注点,比如日志、安全等。它与AspectJ一样,目标是为了处理横切业务,但实现方式有所区别。AspectJ是一种更全面的AOP...

    SpringAOP简单项目实现

    总结,这个"SpringAOP简单项目实现"涵盖了Spring AOP的基础知识,包括切面、通知、切入点的定义与配置,以及如何在实际项目中使用Maven进行构建和依赖管理。对于初学者来说,这是一个很好的实践案例,能够帮助他们...

    Spring AOP简单模拟

    本文将深入探讨Spring AOP的基本概念、工作原理,并通过简单的模拟实现来帮助理解。 首先,我们需要了解AOP的核心概念: 1. **切面(Aspect)**:切面是包含横切关注点的模块,如日志、事务等。在Spring AOP中,切...

    AOP简单实现

    在"AOP简单实现"这个例子中,我们可能看到一个使用注解驱动的AOP实现,其中切面通过`@Aspect`注解声明,通知通过`@Before`、`@After`、`@Around`等注解定义,切入点可能使用`@Pointcut`注解并配合表达式来指定。...

    spring2.5.6 aop简单示例

    首先,让我们理解什么是AOP。面向切面编程是一种编程范式,它将关注点分离为独立的模块,称为"切面"。这些切面可以在程序的多个点,即"连接点"(join points)上织入,而这些点通常是方法的调用。Spring AOP通过代理...

    Spring Aop的简单实现

    首先,我们需要理解Spring AOP的核心概念。切面(Aspect)是关注点的模块化,这些关注点定义了跨越多个对象的行为或责任。切点(Join Point)是程序执行中的特定点,如方法调用或异常处理。通知(Advice)是在特定...

    spring aop简单应用示例

    下面是一个简单的`LogProfilter`类和`applicationContext-aop.xml`配置的示例: ```java // LogProfilter.java public class LogProfilter { @Before("execution(* com.example.service.*.*(..))") public void ...

    Spring3.1AOP简单例子

    在本示例中,我们将深入探讨Spring框架的3.1版本中的核心概念之一:面向切面编程(Aspect-...通过学习和理解这个简单的例子,我们可以更好地掌握这一关键特性,并将其应用于实际项目中,提升软件的质量和可维护性。

    Spring AOP 概念理解及@AspectJ支持

    **Spring AOP 概念理解** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的一个重要组成部分,它允许我们通过定义“切面”来模块化横切关注点,比如日志、事务管理、性能监控等。在传统的...

    Spring注解Aop简单使用

    首先,我们需要理解Spring AOP的基础概念。Spring AOP是基于代理的,它提供了两种类型的代理:JDK动态代理和CGLIB代理。JDK动态代理适用于实现了接口的类,而CGLIB代理则用于未实现接口的类。Spring会根据目标对象...

    Spring AOP的简单实现

    在这个例子中,我们可能会选择注解方式,因为它更简洁且易于理解。 1. **创建切面类(Aspect)** 我们可以创建一个名为`LoggingAspect`的Java类,该类将包含我们的日志记录逻辑。为了声明这是一个切面,我们需要在...

    Spring基础:Spring AOP简单使用

    创建一个简单的Spring AOP应用,首先定义一个切面类,包含切点和通知,然后在Spring配置文件中启用AOP并注册切面,最后编写测试类验证AOP功能是否正常工作。 8. **最佳实践** - 适度使用AOP,过多的切面可能导致...

    unity ioc 和 aop 简单示例

    一个简单的XML配置示例如下: ```xml ``` 在这个例子中,`IService`接口被映射到`ServiceImplementation`类,而`IInterceptor`接口被映射到`LoggingInterceptor`类。这意味着Unity将在需要`IService`...

    Spring aop 简单总结

    首先,理解AOP的基本概念至关重要。AOP是面向切面编程的缩写,它通过将横切关注点与业务逻辑分离,实现了代码的模块化。在传统的面向对象编程中,这些关注点通常是散落在各个类和方法中的。而AOP则允许我们将这些...

    spring aop简单示例.rar

    在本资源"spring aop简单示例.rar"中,我们可以预期包含以下关键知识点: 1. **切面(Aspect)**:切面是AOP的核心概念,它封装了横切关注点,包括通知(Advice)和切入点(Pointcut)。通知定义了在何时何地执行...

    一个简单的aop demo

    标题 "一个简单的AOP demo" 暗示我们将探讨面向切面编程(Aspect-Oriented Programming,简称AOP)的基本概念以及如何通过一个简单的实例来理解它。在软件开发中,AOP是一种编程范式,它允许我们分离关注点,比如...

    Spring AOP基础关于AOP是什么的理解

    Spring AOP 基础关于 AOP 是什么的理解 AOP(Aspect Oriented Programming 面向方面的编程)是一种实现横切面的工具,它是 OOP 的补充,而不是 OOP 的竞争对手。AOP 的出现是为了解决 OOP 中的缺陷,即 OOP 中的类...

Global site tag (gtag.js) - Google Analytics