`
kidiaoer
  • 浏览: 807376 次
  • 性别: 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的简写,中文通常译作面向方面编程,其核心内容就是所谓的“横切关注点”

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

    Aspect-Oriented Programming

    Aspect-Oriented Programming Gregor Kiczales, John Lamping, Anurag Mendhekar, Chris Maeda, Cristina Videira Lopes, Jean-Marc Loingtier, John Irwin

    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例子!AOP(Aspect Oriented Programming)!

    Spring 2.5 Aspect-Oriented Programming

    The aim of Aspect-Oriented Programming (AOP) is not to replace Object-Oriented Programming (OOP), but to complement it, allowing you to create clearer and better structured programs. Gregor Kiczales,...

    面向方面编程AOP

    AOP是OOP的延续,是(Aspect Oriented Programming)的缩写,意思是面向切面编程。 OO注重的是我们解决问题的方法(封装成Method),而AOP注重的是许多解决问题的方法中的共同点,是对OO思想的一种补充! 主要的功能是:...

    编程(思想) POP OOP AOP IOP

    面向过程编程(思想)POP(Procedure Oriented Programming) 面向对象编程(思想)OOP (Object Oriented...面向切面编程(思想)AOP (Aspect Oriented Programming) 面向接口编程(思想)IOP (Interface Oriented Programming)

    CH03-AOP面向切面编程.pptx

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

    Aspect-Oriented Programming in JAVA

    Aspect-Oriented Programming in JAVA

    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...

    MeSDK-delphi Aspect Programming

    The MeAOP Library is Aspect Oriented Programming for delphi. IMO, the aspect is the general feature in fact. It's a helper for object-oriented programming to re-use the feature(function), such as the...

    Aspect.Oriented.Programming.with.the.e.Verification.Language

    It’s about aspect oriented programming. It doesn’t just cover the academic stuff that you’ll read about elsewhere, although that’s useful, but also the more pragmatic side of AOP as well. It’s ...

    进击的编程思想!带你学Spring AOP核心编程思想教程 新角度学面向切面编程

    AOP 的全称是“Aspect Oriented Programming”,即面向切面编程,它将业务逻辑的各个部分进行隔离,使开发人员在编写业务逻辑时可以专心于核心业务,从而提高了开发效率。AOP 采取横向抽取机制,取代了传统纵向继承...

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

    Master AOP in Java. Is is an excellent doc to read

    DELPHI AOP框架(meAOPen)

    meAOP:Aspect Oriented Programming for delphi 面向方面编程的经典框架

    springaop学习方法

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

    AOP 入门学习介绍文档

    AOP(Aspect-Oriented Programming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合...

Global site tag (gtag.js) - Google Analytics