Ruby 的Metaclass功能确实强大,
我仿照Rail的处理的做了一个Aop 的小试验,代码如下:
ruby 代码
-
-
-
- module AopAspects
- def log_method(*args)
- puts "log here"
- args.each do |arg|
- puts arg.to_s
- end
- end
-
- def trans_aspect(*args)
- puts "trans here"
- end
- end
- module AopBinder
- def self.included(c)
- c.extend(AopGenerate)
- end
-
- module AopGenerate
- def run_before(method,*aspects)
- alias_method "#{method}_old".to_sym, method
- before_method = ""
- aspects.inject("") {|before_method,aspect| before_method<<(aspect.to_s + "(*args)\n")}
- class_eval <<-END
- def
-
-
- end
- END
- end
-
- def run_after(method,*aspects)
- alias_method "#{method}_old".to_sym, method
- before_method = ""
- aspects.inject("") {|before_method,aspect| before_method<<(aspect.to_s + "(*args)\n")}
- class_eval <<-END
- def
-
-
- end
- END
- end
- end
- end
-
- class AopTest
- include AopAspects
- include AopBinder
- def initialize
- end
-
- def run
- puts "hello, my run"
- end
-
- def run2(name="")
- puts "hello, #{name}"
- end
- run_before :run ,:log_method
- run_after :run2 , :log_method ,:trans_aspect
- end
-
-
-
- a = AopTest.new
- a.run
- a.run2("ben")
结果如下
log here
hello, my run
hello, ben
log here
ben
trans here
充分体现了Ruby 简洁锐利的原编程风格
分享到:
相关推荐
一、 实验目的 1、了解AOP的概念和作用; 2、理解AOP中的相关术语; 3、了解Spring中两种动态代理方式的区别; 4、掌握基于XML和注解的AspectJ开发。 二、 实验内容 1、按图所示的类图结构,设计接口及其实现类,并...
spring aop spring aop spring aop spring aop spring aop spring aop spring aop spring aop spring aop
Spring_AOP_学习小结 Spring_AOP_学习小结 Spring_AOP_学习小结 Spring_AOP_学习小结
个人整理的关于AOP概念
这是AOP练习的小例子,结合了容器和用C#反射发出实现了动态代理,用来了解AOP基本原理
spring和aspectj的aop实验,详细内容可以移步至博客:https://mp.csdn.net/postedit/97750888
spring-aop-1.1.1.jar spring-aop-1.2.6.jar spring-aop-1.2.9.jar spring-aop-2.0.2.jar spring-aop-2.0.6.jar spring-aop-2.0.7.jar spring-aop-2.0.8.jar spring-aop-2.0.jar spring-aop-2.5.1.jar spring-aop-...
概述 AOP 工具当前的技术状况,比较对于该技术而言最成熟的一些方法:AspectJ、AspectWerkz、JBoss AOP、和 Spring AOP,并对比与每种方法的采用有关的问题。
Why Aspect-Oriented ... AOP in Java and AspectJ (a Review). AOP in Ruby. What you can do today. Example AOP-isms in Ruby on Rails. Aspect-Oriented Design. The AOP Promise for Tomorrow.
开发工具 aopalliance-1.0开发工具 aopalliance-1.0开发工具 aopalliance-1.0开发工具 aopalliance-1.0开发工具 aopalliance-1.0开发工具 aopalliance-1.0开发工具 aopalliance-1.0开发工具 aopalliance-1.0开发工具...
基于注解的spring aop的小demo 整合springMVC
一:实验目的 1、 理解Spring AOP原理和基本概念; 2、掌握基于XML/注解方式的AOP编程; 二:实验内容 1、 定义交易接口: public interface Transaction{ public void income(float amount);//收入 public void...
自己写的aop代理spring
spring aop测试项目
Spring AOP实现方法之一:CGLIB 实现AOP功能
基于注解实现SpringAop基于注解实现SpringAop基于注解实现SpringAop
aop所依赖的所有包+文档+源码,最新版全套aop aspectjweaver aopalliance aspects aspectjrt
spring aop jar 包
开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE...
两个spring aop 的小例子