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配置反射生成代理的方式还是不用的好吧。