- 作者: gigix 2004年03月17日, 星期三 19:52
你可以使用这个链接引用该篇日志 http://publishblog.blogdriver.com/blog/tb.b?diaryID=86245
myxwxwmevk[url=http://www.koolpages.com/kkjlehl/index.html]推广技巧[/url][url=http://www.koolpages.com/kkjlehl/26198047.htm]网站建设策划方案[/url][url=http://www.koolpages.com/kkjlehl/47348973.htm]引擎排名[/url][url=http://www.koolpages.com/kkjlehl/00157846.htm]网站推广mail[/url][url=http://www.koolpages.com/kkjlehl/95187597.htm]网站推广工具下载[/url][url=http://www.powow.com/oxvhseh/index.html]网站推广的方法[/url][url=http://www.powow.com/oxvhseh/80303016.htm]网站推广群发软件[/url][url=http://www.powow.com/oxvhseh/63576814.htm]网站排名榜[/url][url=http://www.powow.com/oxvhseh/46504715.htm]电子邮件群发[/url][url=http://www.powow.com/oxvhseh/90790388.htm]qq无限群发器[/url][url=http://www.pagerealm.com/qoitojq/index.html]如何建立网站[/url][url=http://www.pagerealm.com/qoitojq/40480876.htm]什么网站赚钱[/url][url=http://www.pagerealm.com/qoitojq/93765714.htm]qq消息群发工具[/url][url=http://www.pagerealm.com/qoitojq/13671137.htm]论坛自动发帖工具[/url][url=http://www.pagerealm.com/qoitojq/45301112.htm]进出口企业名录[/url]
将userId放进ThreadLocal,然后在aspect中取出
这个怎么实现啊,老大!
很多文章都提到aop可以用来log。 aop对方法是beforeProcess和afterProcess. 但是我们一般都在方法内纪录log, 也就遇到如何用aop纪录方法内局部变量的问题?
另外的一点看法就是如同caoxg 所说Access Control是业务逻辑相关,那么就是业务编码的一部分,没有必要一定用AOP来实现。否则可能会反而把代码搞乱吧。因为对资源做什么操作只有实现的方法自己才知道,很难拆出来。
参考一下Windows操作系统的权限控制,就可以发现其实我们通常所说的“权限检查”包含了两个方面的内容,一方面是privilege,也就是是否可以执行某种操作如关机;另外一方面是access control,也就是是否可以访问某个资源如文件。系统中的Privilege数目是固定的,而资源的数目则不定。AOP适合于处理privilege,而不擅长于处理Access control。
“横切,竖切”听着怪怪的:)赞同你的观点。
aop的使用,受制于advise所关联部分的设计,比如,这个例子会受到权限系统设计的影响,gigix的权限系统没有说明,但看给出的例子,是不适合aop。
在做方面的设计时,比如缓存,事务,也需要很好设计,才有可能和aop结合,以方便应用。
比如事务处理,要做到类似于j2ee的可以针对方法进行事务定义,这就对事务管理的设计提出很高的要求,而且能不能用到aop上,还要看设计的结果。
你这里有一个误解。
ACL中,其实有两层切割关系,一次是横切,一次是竖切。(我自己的定义名词)
横切是系统模块资源的权限,而竖切是业务逻辑的权限.
比如说,某角色A对公司一科的订单有修改权限,而对公司二科订单无修改权限
那么:
角色A对“resource.order.purchaseOrder.edit”具有写权限,这是横切;
而此订单是一科还是二科的,这就是我所谓的竖切。
竖切基本上没有办法由底层的权限系统过问。
AOP织入的逻辑不应该与业务逻辑直接相关,这应该是一个必要的规则,我能想到的方法就是:
传入的order在ACL的横切逻辑之外再进行判断。
方法一:使用一个proxy类,再进行一次集中验证;
方法二:若使用AOP,传入的参数中,对所有某个对象扩展了PermissionRequired 接口;
则使用另外的一套规则对domain rule进行验证
深入的想一下,其实不是aop的困境,是权限管理的设计问题,对于权限管理会有一个资源和权限的对照,这里的资源定义决定了你会在aop采用什么样的方式处理。
采用aop所选定的方面要有共性才有价值,比如log,普通使用仅仅打印输入输出参数,这个共性不错。但我需要精确打印,比如打印某个资源的名字,打印某个权限编号,极端情况下每个可能用到log的位置所要打印的信息都不一样,这就导致方面没有共性了,虽然还都是log。
如果没有必要非要分离,干脆不使用aop,如果要使用aop,
也许利用配置的方式可以解决。
faint,发错地方了,怎么回事
这个groovy看起来比jython好多了。jython的一个最大特点是已经不再维护了(发起者已经撤了,但是好像还有人在升级,只不过几乎没有活动迹象),而且位置在python和java之间有点尴尬(cpython早就升了好几个版本了,在语法上也有重要的新特性,这些jython都不灵),还要自己写ant的task(我写了一个,后来没怎么用),后来看到groovy,对jython基本失去兴趣。
btw,spring里面自动aop的东西在autoproxy 下面,可以指定需要搞的bean。