面向切面编程——java
2016-08-11 16:45
204 查看
-AOP(面向切面编程)-
AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
这种在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。
-产生原因-
我们知道:面向对象的特点是继承、多态和封装。而封装就要求将功能分散到不同的对象中去,这在软件设计中往往称为职责分配。实际上也就是说,让不同的类设计不同的方法。这样代码就分散到一个个的类中去了。这样做的好处是降低了代码的复杂程度,使类可重用(有利必有弊,有舍必有得)。但是人们也发现,在分散代码的同时,也增加了代码的重复性。比如说,我们在两个类中都需要在每个方法中做日志。面向对象的设计方法:必须在两个类的方法中都加入日志的内容。也许他们是完全相同的,但就是因为面向对象的设计让类与类之间无法联系(类之间是独立的,不同于类的调用【或者造一个日志类】),而不能将这些重复的代码统一起来。也许有人会说:我们可以将这段代码写在一个独立的类独立的方法里,然后再在这两个类中调用(类似于工具类)。但是,这样一来,这两个类跟我们上面提到的独立的类就有耦合了,它的改变会影响这两个类。【问题来了】那么,有没有什么办法,能让我们在需要的时候,随意地加入代码呢?这种在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。
-基础概念-
切面(Aspect):对横切关注点的抽象(类似类对对象的抽象) ,指定类指定方法的代码片段。连接点(JoinPoint):被拦截到的点,泛指方法,切入到哪些类、哪些方法。切入点(CutPoint):对哪些连接点进行拦截的定义 通知(Advice):在特定的连接点,AOP框架执行的动作.前置/后置/例外/最终/环绕通知(调用方法之前执行,全部执行完毕之后) 引入(Introduction): 添加方法或字段到被通知的类。 Spring允许引入新的接口到任何被通知的对象。例如,你可以使用一个引入使任何对象实现 IsModified接口,来简化缓存。 目标对象(Target Object): 包含连接点的对象。也被称作 被通知或被代理对象。 AOP代理(AOP Proxy): AOP框架创建的对象,包含通知。 在Spring中,AOP代理可以是JDK动态代理或者CGLIB代理。 织入(Weaving): 组装方面来创建一个被通知对象。这可以在编译时 完成(例如使用AspectJ编译器),也可以在运行时完成。Spring和其他纯Java AOP框架一样, 在运行时完成织入。
-AOP与OOP-
从OOP角度分析,我们关注业务的处理逻辑,是属于纵向的行为,从AOP角度分析,我们关注对象行为发生
时的问题,是属于横向的行为。
-应用环境-
AOP能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任(监控函数的调用,捕获异常的发生),例如事务处理、日志管理、权限控制、安全控制等,封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。
-优势-
1:降低模块的耦合度
2:使系统容易扩展
3:设计决定的迟绑定:使用AOP,设计师可以推迟为将来的需求作决定,因为它
可以把这种需求作为独立的方面很容易的实现。
4:更好的代码复用性
-运行流程-
AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
这种在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。
-产生原因-
我们知道:面向对象的特点是继承、多态和封装。而封装就要求将功能分散到不同的对象中去,这在软件设计中往往称为职责分配。实际上也就是说,让不同的类设计不同的方法。这样代码就分散到一个个的类中去了。这样做的好处是降低了代码的复杂程度,使类可重用(有利必有弊,有舍必有得)。但是人们也发现,在分散代码的同时,也增加了代码的重复性。比如说,我们在两个类中都需要在每个方法中做日志。面向对象的设计方法:必须在两个类的方法中都加入日志的内容。也许他们是完全相同的,但就是因为面向对象的设计让类与类之间无法联系(类之间是独立的,不同于类的调用【或者造一个日志类】),而不能将这些重复的代码统一起来。也许有人会说:我们可以将这段代码写在一个独立的类独立的方法里,然后再在这两个类中调用(类似于工具类)。但是,这样一来,这两个类跟我们上面提到的独立的类就有耦合了,它的改变会影响这两个类。【问题来了】那么,有没有什么办法,能让我们在需要的时候,随意地加入代码呢?这种在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。
-基础概念-
切面(Aspect):对横切关注点的抽象(类似类对对象的抽象) ,指定类指定方法的代码片段。连接点(JoinPoint):被拦截到的点,泛指方法,切入到哪些类、哪些方法。切入点(CutPoint):对哪些连接点进行拦截的定义 通知(Advice):在特定的连接点,AOP框架执行的动作.前置/后置/例外/最终/环绕通知(调用方法之前执行,全部执行完毕之后) 引入(Introduction): 添加方法或字段到被通知的类。 Spring允许引入新的接口到任何被通知的对象。例如,你可以使用一个引入使任何对象实现 IsModified接口,来简化缓存。 目标对象(Target Object): 包含连接点的对象。也被称作 被通知或被代理对象。 AOP代理(AOP Proxy): AOP框架创建的对象,包含通知。 在Spring中,AOP代理可以是JDK动态代理或者CGLIB代理。 织入(Weaving): 组装方面来创建一个被通知对象。这可以在编译时 完成(例如使用AspectJ编译器),也可以在运行时完成。Spring和其他纯Java AOP框架一样, 在运行时完成织入。
-AOP与OOP-
从OOP角度分析,我们关注业务的处理逻辑,是属于纵向的行为,从AOP角度分析,我们关注对象行为发生
时的问题,是属于横向的行为。
-应用环境-
AOP能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任(监控函数的调用,捕获异常的发生),例如事务处理、日志管理、权限控制、安全控制等,封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。
-优势-
1:降低模块的耦合度
2:使系统容易扩展
3:设计决定的迟绑定:使用AOP,设计师可以推迟为将来的需求作决定,因为它
可以把这种需求作为独立的方面很容易的实现。
4:更好的代码复用性
-运行流程-
相关文章推荐
- Java实现AOP面向切面编程的实例教程
- Java实现AOP面向切面编程的实例教程
- 【JAVA笔记——器】Spring面向切面编程 Aspect Oriented Programming with Spring
- 结合Java实例代码来理解 AOP--面向切面编程 中的各个术语
- Java乔晓松-基于注解的面向AOP(切面)编程
- Java面试之面向切面编程AOP的原理,
- JAVA面向过程编程、面向对象编程和面向切面编程理解
- 对JAVA中MVC设计模式、JAVAWEB的三层架构、AOP面向切面编程的总结
- Java动态代理之JDK动态代理和CGLib动态代理 面向切面编程AOP原理
- Java乔晓松-基于注解的面向AOP(切面)编程
- 面向切面编程
- spring aop 面向切面编程 如何来做一个强大的日志记录功能.原创
- Spring中ioc的面向切面编程的意思
- 面向 Java 开发人员的 Scala 指南: 面向对象的函数编程
- 反向控制和面向切面编程在Spring的应用[转载]
- 何为"面向切面编程AOP"
- 面向Java程序员的Ajax:构建动态Java程序-Java基础-Java-编程开发
- 理解Java面向对象的程序设计思想-Java基础-Java-编程开发
- Java中继承和面向接口的编程
- 体验Java 1.5中面向方面(AOP)编程