还在《程序员》做编辑的时候,我曾经主持过一次关于AOP的技术专题。凭着传说中的“敏锐的技术嗅觉”(呵呵,听起来像狗鼻子),我感觉AOP会是一个很有用的东西,尽管当时还不知道具体有什么用。(拉句废话:《程序员》正在招聘技术编辑,如果你认为自己吹牛的本事胜过编程,又善于胡思乱想——就像我这样,我会建议你去尝试一下这个职位。)
我的朋友恶魔曾经多次说起“GP与‘面向事件编程’”这个话题。按照我的理解,所谓“事件编程”主要解决的是一个正交分解的问题,而GP恰好是一个提供正交分解的范式。最近,国外J2EE社群经常在讨论AOP,似乎他们认为AOP提供的正交分解能力很适合解决诸如业务流之类EAI经常碰到的问题……又开始漫天吹牛皮了。放下鬼扯的东西,我想看看AOP究竟可以做什么。
AOP可以用于Java程序的使用限制。在发布之前,先用AspectJ给每个类织入身份验证的逻辑,这样要破解就会困难得多。关于AOP如何用于身份验证和授权,在这里有一篇文章:http://www.theserverside.com/resources/review/AspectJ/chapter10_AspectJ.zip
另一个令人遐想联翩的成果是Jan Hannemann和Gregor Kiczales得到的,他们用AOP实现了GOF的23个设计模式。对于其中的17个模式,他们成功地借助AspectJ去除了各参与者之间的代码级依赖。一般认为,设计模式在带来灵活性的同时也使代码变得复杂而难以阅读,“获得灵活性”的模式框架代码与“完成功能”的业务代码混淆在一起,容易使阅读者迷失方向。因此Jan Hannemann和Gregor Kiczales进行的这个实验是相当有意义的,它可能会大大提高普通程序员使用设计模式的积极性。甚至可以期望,设计模式由水平较高的程序员来实现,只须将其织入有需要的模块之中即可。
在http://www.cs.ubc.ca/~jan/AODPs/gof.zip可以下载他们用AOP实现GOF模式的代码示例。在编译运行这些示例之前,你需要首先安装JDK和AspectJ(http://www.aspectj.org)。他们在OOPSLA 2002大会上做了一个题为“Design Pattern Implementation in Java and AspectJ”的演讲,你可以在http://www.cs.ubc.ca/~jan/papers/oopsla2002/oopsla02-patterns.pdf看到这篇演讲的全文。
Joshua Kerievsky曾经写过一个名为“Refactoring to Patterns”的系列文章。他认为,在设计的前期引入模式很可能导致过度工程(over-engineering)。也许,今后模式社群可以考虑“refactoring to aspects”的思路:将设计模式抽取到一个aspect中,然后将其织入需要的模块。灵活性与代码的清晰,鱼与熊掌可以得兼?
Jan Hannemann和Gregor Kiczales的主页:http://www.cs.ubc.ca/~jan/AODPs/
AOP和AspectJ的信息:http://www.aspectj.org
《程序员》对AOP的介绍:http://www.csdn.net/magazine/old/200211.shtm
分享到:
相关推荐
Java面试题53.AOP是什么?都用它做什么?.mp4
SpringAOP是什么?为什么要有SpringAOP?
NULL 博文链接:https://moshow.iteye.com/blog/1608726
java面试宝典
描述一下Spring AOP? 在Spring AOP中关注点(concern)和横切关注点(cross-cutting concern)有什么不同? AOP有哪些可用的实现? Spring中有哪些不同的通知类型(advice types)? Spring AOP 代理是什么? 引介...
spring aop spring aop spring aop spring aop spring aop spring aop spring aop spring aop spring aop
背景通过前面的章节,我们知道在程序开发中 AOP 主要用来解决一些系统层面上的问题,Struts2 的拦截器设计就是基于 AOP 的思想,是个比较经典的例子。总
西门子如何实现AOP30与驱动装置??之间的时钟同步功能pdf,西门子如何实现AOP30与驱动装置之间的时钟同步功能: 通过使用 AOP30 与驱动装置之间的时钟同步功能,可以为驱动装置的故障信息标记时间戳,从而方便用户对...
When to use Spring AOP and AspectJ AOP? Expert author Ramnivas Laddad shows how to combine technologies such as Spring, Hibernate, Swing, and JDBC with AspectJ. The book fully covers the latest ...
NULL 博文链接:https://quicker.iteye.com/blog/670885
spring-aop-1.1.1.jar spring-aop-1.2.6.jar spring-aop-1.2.9.jar spring-aop-2.0.2.jar spring-aop-2.0.6.jar spring-aop-2.0.7.jar spring-aop-2.0.8.jar spring-aop-2.0.jar spring-aop-2.5.1.jar spring-aop-...
aop所依赖的所有包+文档+源码,最新版全套aop aspectjweaver aopalliance aspects aspectjrt
开发工具 aopalliance-1.0开发工具 aopalliance-1.0开发工具 aopalliance-1.0开发工具 aopalliance-1.0开发工具 aopalliance-1.0开发工具 aopalliance-1.0开发工具 aopalliance-1.0开发工具 aopalliance-1.0开发工具...
AOP全称(Aspect Oriented Programming)面向切片编程的简称 AOP的定义: AOP通过预编译方式和运行期动态代理实现,在不修改源代码的情况下,给程序动态统一添加功能的一种技术,简称AOP。是spring框架的一个重要...
有关于AOP,我们在面试中也被无数次问到,AOP是什么?AOP有什么作用与优势?AOP在项目中是如何用到的? 这些还都是比较简单的,有些可能会问你AOP的实现是怎样的? 哪怕没有看过源码的同学也应该知道,AOP是...
自己写的aop代理spring
NULL 博文链接:https://rmn190.iteye.com/blog/683308
1.4 Spring AOP 和 AspectJ AOP 有什么区别? 2. 在 SpringBoot 中使用 Aop 功能 2.0 创建一个SpringBoot项目 2.1 引入 POM 依赖 2.1.1 引入springboot aop依赖 2.1.2 引入fastjson依赖 2.2 .编写配置类SpringConfig...
Spring AOP实现方法之一:CGLIB 实现AOP功能
AOP的意思就是面向切面编程。本文主要是通过梳理JDK中自带的反射机制,实现 AOP动态代理模式,这也是Spring AOP 的实现原理