`
kidiaoer
  • 浏览: 822164 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

AOP(Aspect oriented programming) 面向方面编程

阅读更多
一 AOP(Aspect oriented programming) 面向方面编程
OOP面向对象编程
AOP和OOP虽然在字面上十分相似,但却是面向不同领域的两种设计思想.OOP 是在面向过程的编程方法基础上进行的改进,而AOP面向方面编程又是在面向对象编程的基础上进行改进而来的一种新的软件开发方法.OOP针对问题领域中存在的实体及其属性和操作进行抽象和封装,而AOP则是针对业务处理过程中的切面进行提取.
例如: 某一操作在各个模块中都有涉及,就可把这个操作"横切"存在于系统当中,这些操作大都不属于逻辑操作的部分,AOP就是将这些操作与业务逻辑分离,AOP 所面对的是处理过程中的某个步骤或阶段.
              AOP的核心思想:
    就是将应用程序中的业务逻辑处理部分同对其提供的通用服务部分即"横切关注点"进行分离.
 
二 Sping框架的特点 AOP的应用
Spring框架目前如此流行,大概一方面是Spring提供了一套全面并且十分成熟的轻型应用程序基础框架,对复杂的应用开发提供了帮助,另一方面,实际开发中Spring最大的优势在于它是从实际项目开发经验中抽取的,并提供了丰富的类库,可大大节省编码量,不过Spring框架中最吸引人的也是该应用框架最具特色的地方就是IoC控制反转或者DI依赖注入.比如说 不用你主动来找我,我会通知你的
 
但是Spring最成功的地方还是AOP的应用.
Spring应用程序框架将AOP思想融入了整个框架的设计和开发与应用中,实际上是一种设计式的扩展.其内置AOP默认是使用动态代理模式实现,即在代码中不出现与具体要用到的接口或者类的引用. 即动态代理的核心技术
 
三 Spring动态代理机制的实现
通过动态Proxy模式,在目标对象的方法调用前后插入相应的处理代码,任何的接口都能被代理,也符合”面向接口编程”的良好风格.
Spring实现原理,其内置的AOP默认使用动态代理模式实现,即在代码中不出现与具体应用相关的接口或者类引用.即这个代理类适用于任何接口的实现
例:
public class MyInvocationHandler implements InvocationHandler
{
       private Object originalObject;
       public Object bind(Object obj)
       {
              this.orginalObject = obj;
              return Proxy.newProxyInstance(obj.getClass().getClassLoader(),obj.getClass().getInterfaces(),this);
       }
      
       public Object invoke(Object proxy,Method method,Object [] args)throws Throwable
       {
              Object result = null;
              result = method.invoke(originalObject,args);
              return result;
       }
}
分析一下上述代码的关键
return Proxy.newProxyInstance(obj.getClass().getClassLoader(),obj.getClass().getInterfaces(),this);
java.lang.reflect.Proxy.newProxyInstance 方法根据传入的接口类型obj.getClass().getInterfaces() 动态构造出一个代理实例返回,这也说明为什么动态代理实现要求其所代理的对象一定要至少实现一个接口.因这个代理类实例是在运行时从内存中动态构造出的它实现了传入的所有接口.
 
public Object invoke(Object proxy,Method method,Object [] args) throws Throwable
{
       …
       result = method.invoke(originalObject,args)
}    
       InvocationHandler.invoke方法将在代理类的方法将在代理类的方法被调用之前触发.通过这个方法,我们可以在被代理类方法调用的前后进行一些处理,在上述方法中,InvocationHandler.invoke方法的参数中传递了当前被调用的方法Method,被调用方法的参数args,通过 method.invoke方法调用被代理类的原始方法实现.这样就可以在被代理类的方法调用前后写入任何想要进行的操作.
分享到:
评论

相关推荐

    Aspect-Oriented Programming 面向方面编程

    Aspect-Oriented Programming 面向方面编程 简称AOP AOP所要做的事情就是从系统中分离出方面,然后集中实现,从面可以独立编写业务逻辑代码,在系统运行的时候,再将方面代码“织入”到系统中

    Aspect-Oriented Programming with AspectJ

    【Aspect-Oriented Programming with AspectJ】是一种编程范式,旨在解决传统面向对象编程中模块化问题,特别是在处理横切关注点(如日志、事务管理、安全性等)时的代码分散和重复。AspectJ是Java平台上的一个开源...

    Aspect-Oriented Programming

    ### 面向切面编程(Aspect-Oriented Programming, AOP) #### 一、概述 面向切面编程(Aspect-Oriented Programming, AOP)是一种编程范式,旨在提高程序模块化程度,通过分离关注点(Separation of Concerns, SoC...

    Aspect Oriented Programming的简写,中文通常译作面向方面编程,其核心内容就是所谓的“横切关注点”

    面向方面编程(Aspect Oriented Programming,AOP)是一种编程范式,旨在提高代码的模块化程度,通过将程序中的关注点分离,使代码更易于维护和扩展。在传统的面向对象编程(OOP)中,关注点通常是混合在一起的,...

    Spring 2.5 Aspect-Oriented Programming source code

    Spring 2.5 是 Spring 框架的一个重要版本,它在面向切面编程(Aspect-Oriented Programming,AOP)方面提供了强大的支持。面向切面编程是一种编程范式,旨在将关注点分离,使代码更加模块化,尤其是处理那些跨越多...

    Eclipse AspectJ: Aspect-Oriented Programming

    Aspect-oriented software design (ASOD), which follows the Java philosophy of "write once, run anywhere", is a new way of thinking about program construction. It is a rapidly growing and evolving ...

    Spring AOP面向方面编程原理Spring AOP面向方面编程原理

    ### Spring AOP面向方面编程原理详解 #### 一、引言与定义 Spring AOP(Aspect Oriented Programming)是Spring框架中的一个核心组件,用于实现面向切面编程。AOP是一种编程范式,旨在将横切关注点(Cross-cutting...

    Spring 2.5 Aspect-Oriented Programming

    为了解决这些问题,面向切面编程(Aspect-Oriented Programming, AOP)应运而生。 #### 面向切面编程的定义与作用 面向切面编程是一种旨在补充面向对象编程而非替代它的编程范式。它帮助开发者创建更为清晰和结构...

    aop:aspect

    标题 "aop:aspect" 指涉的是Spring框架中的面向切面编程(Aspect-Oriented Programming, AOP)的一个核心概念。在Spring AOP中,`aop:aspect`是XML配置中定义一个切面的元素,它允许我们将关注点(如日志、事务管理...

    面向方面编程AOP

    面向方面编程(Aspect Oriented Programming,简称AOP)是一种程序设计范式,它作为面向对象编程(Object-Oriented Programming,简称OOP)的补充和发展。AOP的核心理念在于识别应用程序中的**横切关注点**(Cross-...

    CH03-AOP面向切面编程.pptx

    AOP(Aspect Oriented Programming):面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。 AOP是对OOP的补充,是软件开发中的一个热点,也是Spring框架中的一个重要内容。 利用AOP...

    面向方法编程AOP学习之二 —— “原始时代”

    在这一阶段,程序员们开始意识到将程序分解为一系列独立的功能模块或方法的重要性,但尚未发展出如面向切面编程(Aspect-Oriented Programming,AOP)等更为先进的技术。 在面向方法编程的“原始时代”,开发者主要...

    AOP - Mastering AspectJ Aspect-Oriented Programming in Java(John Wiley and Sons).pdf

    **一、面向切面编程(Aspect-Oriented Programming, AOP)简介** 面向切面编程是一种编程范式,旨在提高模块化程度,通过将横切关注点(cross-cutting concerns)从业务逻辑中分离出来,使开发者能够更专注于核心...

    AOP——面向服务--面向方面编程

    面向方面编程(AOP,Aspect-Oriented Programming)是一种编程范式,旨在解决传统面向对象编程(OOP)中横切关注点的问题。横切关注点是指那些跨越多个对象或模块,但又不直接属于单一模块职责的功能,如日志记录、...

    Spring中IOC(反转控 制) 和 AOP(面向方面编程)

    在Java世界里,Spring框架是应用最广泛的轻量级框架之一,它的核心特性包括IOC(Inversion of Control,反转控制)和AOP(Aspect Oriented Programming,面向方面编程)。这两个概念是Spring框架的灵魂,极大地提升...

    Aspect-Oriented Programming in JAVA

    面向切面编程(Aspect-Oriented Programming,简称AOP)是一种在Java等编程语言中用于解决横切关注点(cross-cutting concerns)的编程范式。传统的面向对象编程(Object-Oriented Programming,OOP)虽然强大且广泛...

    Wiley.Using.Aspect.Oriented.Programming.for.Trustworthy.Software.Development.May.2008

    ### 一、面向切面编程(Aspect-Oriented Programming, AOP)的基本概念 面向切面编程是一种编程范式,旨在提高软件模块化程度,通过分离关注点(Separation of Concerns, SoC)的方式将横切关注点(Cross-cutting ...

    AOP(面向切面)的C#例子VS2012

    AOP为Aspect Oriented Programming的缩写,意为:面向切面编程(也叫面向方面),可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。AOP实际是GoF设计模式的延续,...

    Spring 2.5 aspect oriented programming

    This book is written for software architects, engineers, and developers that want be able to write applications in a more modular and concise way, without learning Aspect or using languages other than...

Global site tag (gtag.js) - Google Analytics