AOP-面向切面的编程
2018-02-27 18:17
288 查看
一.AOP的简介1.AOP的基本概念AOP即Aspect-Oriented programming的缩写,中文意思是面向切面(或方面)编程。他是一种思想,可在不改变程序源码的情况下为程序添加额外的功能。2.AOP的发展阶段静态AOP:Aspect形式,通过特定的编译器,将实现后的Aspect编译并织入到系统的静态类中。
动态AOP:AOP的织入过程在系统运行开始之后进行,而不是预先编译到系统中。
3.AOP的主要意图允许通过分离应用的业务逻辑与系统级服务进行内聚性的开发。应用对象只实现业务逻辑即可,并不负责其他的系统级关注点。4.AOP的应用场景日志记录、跟踪、监控和优化,性能统计、优化,安全、权限控制,应用系统的异常捕捉及处理,事物处理,缓存,持久化,懒加载(Lazy loading),内容传递,调试,资源池,同步等等。二.AOP的示例
[java] view plain copy public class ForumService{
public void removeTopic(int topicid){
pmomitor.start();
transManager.beginTransaction();
topicDao.removeTopic(topicid);
transManager.commit();
pmomitor.end();
}
}
上面的代码是一个论坛的性能监视代码段,他的横切逻辑示意图为:
其中业务逻辑的抽取主要是:将相同功能的代码段横向抽取出来,使用横切的逻辑来实现。
三.AOP的术语连接点:程序执行的某个特定位置,比如类初始化前,初始化后,方法调用前,方法调用后等等
切点:通过切点来定位特定的连接点
增强:织入到目标的类连接点上的一段程序代码
目标对象:增强逻辑的织入目标类
引介:引介是一种特殊的增强,他为类添加一些属性和方法
织入:将增强添加到目标类的具体连接点上的过程
代理:一个类被AOP织入增强后,会产生一个结果类,该类是融合了原类和增强逻辑的代理类
切面:由切点和增强组成,既包括了横切逻辑的定义,也包括了连接点的定义
四.五种通知前置通知:在目标方法调用之前执行。不能阻止后续执行,除非抛异常。
后置通知:在目标方法调用之后执行。目标方法正常结束才执行。
异常通知:在目标方法调用发生异常之后执行。但是如果目标方法中捕获了异常,那么异常通知不会执行。
最终通知:在目标方法调用之后执行。目标方法正常或异常都执行。
环绕通知:在目标方法调用之前和之后执行。
说明:
后置通知可以接受目标方法的返回值。
最终通知中不能访问返回值,因为方法可能会出异常。
异常通知可以接收异常对象,并且可以指定在出现特定异常时才执行。
五种通知在内部的组织[java] view plain copy try {
// 调用前置通知
// 环绕前置处理
// 调用目标对象方法
// 环绕后置处理
// 调用后置通知
} catch (Exception e) {
// 调用异常通知
} finally {
// 调用最终通知
}
四.AOP的实现者以下列举的是一些常用的基于Java的AOP实现者1.AspectJAspectJ是目前最完善的AOP语言,对Java编程语言进行了扩展,定义了AOP语法,能够在编译期提供横切代码的织入。AspectJ提供了两种横切实现机制,一种称为动态横切(Dynamic Crosscuting),另一种成为静态横切(Static Crosscuting)。2.AspectWerkz基于java的简单、动态和轻量级的AOP框架,支持运行期或者类装载期织入横切代码,它拥有一个特殊的类装载器。他与AspectJ项目已经合并,第一个发行版是AspectJ5。扩展AspectJ语言,以基于注解的方式支持类似AspectJ的代码风格。3.JBoss AOPJBoss是一个开源的符合J2EE规范的应用服务器,作为J2EE规范的补充,JBoss中引入了AOP框架,为普通Java提供了J2EE服务,而无需遵循EJB规范。JBoss通过类载入时,使用Javassis对字节码操作实现动态AOP框架。4.Spring AOPSpring AOP使用纯Java实现,不需要专门的编译过程,不需要特殊的类装载器,他在运行期通过代理方式向目标类织入增强代码。Spring并不尝试提供最完整的AOP实现,主要侧重一种和Spring IoC容器整合的AOP实现,以解决企业级开发中的常见问题。
动态AOP:AOP的织入过程在系统运行开始之后进行,而不是预先编译到系统中。
3.AOP的主要意图允许通过分离应用的业务逻辑与系统级服务进行内聚性的开发。应用对象只实现业务逻辑即可,并不负责其他的系统级关注点。4.AOP的应用场景日志记录、跟踪、监控和优化,性能统计、优化,安全、权限控制,应用系统的异常捕捉及处理,事物处理,缓存,持久化,懒加载(Lazy loading),内容传递,调试,资源池,同步等等。二.AOP的示例
[java] view plain copy public class ForumService{
public void removeTopic(int topicid){
pmomitor.start();
transManager.beginTransaction();
topicDao.removeTopic(topicid);
transManager.commit();
pmomitor.end();
}
}
上面的代码是一个论坛的性能监视代码段,他的横切逻辑示意图为:
其中业务逻辑的抽取主要是:将相同功能的代码段横向抽取出来,使用横切的逻辑来实现。
三.AOP的术语连接点:程序执行的某个特定位置,比如类初始化前,初始化后,方法调用前,方法调用后等等
切点:通过切点来定位特定的连接点
增强:织入到目标的类连接点上的一段程序代码
目标对象:增强逻辑的织入目标类
引介:引介是一种特殊的增强,他为类添加一些属性和方法
织入:将增强添加到目标类的具体连接点上的过程
代理:一个类被AOP织入增强后,会产生一个结果类,该类是融合了原类和增强逻辑的代理类
切面:由切点和增强组成,既包括了横切逻辑的定义,也包括了连接点的定义
四.五种通知前置通知:在目标方法调用之前执行。不能阻止后续执行,除非抛异常。
后置通知:在目标方法调用之后执行。目标方法正常结束才执行。
异常通知:在目标方法调用发生异常之后执行。但是如果目标方法中捕获了异常,那么异常通知不会执行。
最终通知:在目标方法调用之后执行。目标方法正常或异常都执行。
环绕通知:在目标方法调用之前和之后执行。
说明:
后置通知可以接受目标方法的返回值。
最终通知中不能访问返回值,因为方法可能会出异常。
异常通知可以接收异常对象,并且可以指定在出现特定异常时才执行。
五种通知在内部的组织[java] view plain copy try {
// 调用前置通知
// 环绕前置处理
// 调用目标对象方法
// 环绕后置处理
// 调用后置通知
} catch (Exception e) {
// 调用异常通知
} finally {
// 调用最终通知
}
四.AOP的实现者以下列举的是一些常用的基于Java的AOP实现者1.AspectJAspectJ是目前最完善的AOP语言,对Java编程语言进行了扩展,定义了AOP语法,能够在编译期提供横切代码的织入。AspectJ提供了两种横切实现机制,一种称为动态横切(Dynamic Crosscuting),另一种成为静态横切(Static Crosscuting)。2.AspectWerkz基于java的简单、动态和轻量级的AOP框架,支持运行期或者类装载期织入横切代码,它拥有一个特殊的类装载器。他与AspectJ项目已经合并,第一个发行版是AspectJ5。扩展AspectJ语言,以基于注解的方式支持类似AspectJ的代码风格。3.JBoss AOPJBoss是一个开源的符合J2EE规范的应用服务器,作为J2EE规范的补充,JBoss中引入了AOP框架,为普通Java提供了J2EE服务,而无需遵循EJB规范。JBoss通过类载入时,使用Javassis对字节码操作实现动态AOP框架。4.Spring AOPSpring AOP使用纯Java实现,不需要专门的编译过程,不需要特殊的类装载器,他在运行期通过代理方式向目标类织入增强代码。Spring并不尝试提供最完整的AOP实现,主要侧重一种和Spring IoC容器整合的AOP实现,以解决企业级开发中的常见问题。
相关文章推荐
- AOP-面向切面编程——AspectJ
- js实现面向切面的编程(AOP)
- AOP-面向切面的编程
- 使用Spring进行面向切面(AOP)编程
- Web项目中静态代理和动态代理为基础的面向切面编程AOP
- 1013 面向切面编程AOP
- AOP面向切面编程
- AOP面向切面编程思想的原理(简单理解)
- 什么是面向切面编程AOP
- iOS的AOP(面向切面)编程--Aspects
- AOP面向切面编程,JDK的动态代理方式
- AOP面向切面编程--高级
- AOP面向方面(切面)编程
- CGLIB实现AOP代理的测试类,与Spring分离,加深对面向切面编程的理解
- Java乔晓松-基于注解的面向AOP(切面)编程
- Java乔晓松-基于注解的面向AOP(切面)编程
- PHP之AOP面向切面编程原理(3)
- 【spring-boot】spring aop 面向切面编程初接触--切点表达式
- 深入浅出面向切面编程AOP
- 面向切面编程AOP的浅显理解(二)