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

作者: 宏定义
发布时间:2015-07-13 11:31:48

一般情况下,实现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配置反射生成代理的方式还是不用的好吧。

标签: Ruby
来源:http://www.cnblogs.com/alabasta/archive/2012/04/05/2433594.h

推荐: