ruby的aop,虽然不知道为什么ruby要用aop但是还是学些下这个思想

一般情况下,实现aop是想通过通用的方法名来控制在这些方法的前后调用相关的操作,就像spring一样,通过正则表达式来判断相关的类的相关方法匹配,然后前后加log等。

在ruby中也可以实现相同的操作(参考值超越java),但是ruby是语言级别的代码如下,这个例子简单,所以没有什么通用的能力,不可以实现正则表达式的匹配。

class BasicClassOfAop
  def render1
    puts "rendering something!"
  end
end

class AOPDemo < BasicClassOfAop
  def render_with_layout
    puts "with layout!"
    render_without_layout()
  end
end

AOPDemo.class_eval do
  alias_method :render_without_layout, :render1
  alias_method :render1, :render_with_layout
end

aop = AOPDemo.new
aop.render1()

 

ruby是通过方法别名来实现这种诡异的需求,但是一般我们都知道像ruby这种静态强类型的语言来说动态代理好像不是什么难事,所以像spring那样用xml配置反射生成代理的方式还是不用的好吧。

posted @ 2012-04-05 19:15  宏定义  阅读(403)  评论(0编辑  收藏  举报