关于java aop和dotnet attribute, 有的人说, aop是概念, attribute是技术, 不能混为一谈, 不过如果你想在不影响原有class hiberarchy的条件下, 用横切的方法去影响class或method的行为, 当你对.net程序员提这个要求, 他们想到的是attribute, 如果你对java程序员说, 他们肯定会说aop, 所以无论是概念还是技术, 只要他们干的是有相同之处, 我们就不用去太在乎他的名字. 只专著他们的功能好了.
首先, aop和dotnet attribute都属于declarative programming(dp), dp的主要目的就是解决code reuse问题, 在不改code和少改code的情况下, 通过替换adapter来更改系统的功能。思路很象(object oriented programming)oop里的options或style, 不同的是在oop里, 你得把aa.options = .. 或setstyle(aa, ..)放到code里, 这样比较灵活, 但是一但功能变动, programer必须查看整个程序去找到对应的代码, 而且可能不只一处, 提高了系统的维护成本
就我目前所知, aop多数是用xml来配置管理adapter, 这样不用更改code, 只要更改xml就可以了, 这确实比较方便, 但也带来了管理的问题, 比如, 我们用以下的code来配置和初始化adapter环境
--抄自nuke的spring framework open document, thanks
applicationcontext ctx=new
filesystemxmlapplicationcontext("bean.xml");
action action = (action) ctx.getbean("theaction");
很多时侯, 我们把这段初始化adapter的code封装到framework里base class的construction里,原因就不用說了。但这样一來, 当我们在开发系统时使用很多基于aop的framework时, 系统就得带有很多xml, 其它人是无法光从系统code知道系统到底执行了啥东西, 他们得从framework的文档或code里找到哪个xml被用到, 再去xml里看哪个element是针对哪个adapter的, 这样也提高了系统的维护成本。有的ide支持可以缓解一些问题,比如在jbuilder, eclipse里加入spring 的配制插件去帮助修改xml。
dotnet attribute引入了attribute target的概念, target对应的是code的基本元素, 象method, class, 以及assembly(app), 比如
[webmethod]
procedure aaa(..);
这样做的好处简单的说, 一是缩小了adapter的在code里搜索范围, programer只要查看target就可以了, 二是adapter配制是在code里, programer也不用到处去找对应的xml和element,
缺点是当修改attribute 后必须re-compile, 不如aop方便, 但也避免了aop的reflection带来的cost, programmer 还可通过compiling error去找到typo问题。
目前, java 5里也出现了类似的语法, 比如以下例子是ejb3里用来实现dependency injection,很象以前java xdoclet里的annotations .
@ejb(name="calculator", jndiname = "org.jboss.tutorial.injection.bean.calculator")
public void setcalculator(calculator c)
{
set = c;
}
======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/