最近在做一个 Spring 项目,看到 Spring 中的 AOP 功能,感觉和 Rails 中的before_action很类似。
before_action
但是看到依赖注入、控制反转的概念,却发现很难在 Rails 框架中找到相应的组件/功能,这是为什么呢?
依赖注入是有的。只是没有那个容器和自动配置吧。
在 ruby 中,aop 可以简单地使用 alias_method/define_method/method_added 来实现,无需另外使用什么 InvocationHandler、cglib 那些繁复的东西
DI、IOC 在 java 中很着重我想是为了提醒 javaer 把各种动作抽象成一个个 interface,但在 ruby 中无需管你什么类型,只要你有这个 method id 就能调用,也就是 duck typing
ruby 本质上就是设计得这么动态
Dependency injection is not a virtue http://david.heinemeierhansson.com/2012/dependency-injection-is-not-a-virtue.html
before action 更像 java web 中的过滤器多一些 aop 不仅仅 spring
@Rei @chenge 好的,谢谢
@theblock24block 嗯,我也看到了说法说 AOP 在 Ruby 里实现起来比较简单。
@zouyu 是说 before_action 只能作用在 action 上,AOP 可以做得更细致一些么,比如 method 上?
before_filter 就是 依赖注入 的感觉阿,它改变了实例何时被修改这一时序
搜 rails before_action ioc 会看到这一解释 https://stackoverflow.com/questions/12174704/how-does-rails-implement-before-filter
ioc 即 控制反转 Inversion of Control,DI 依赖注入 是控制反转实现的一种方式,before_filter 是控制反转实现的另一种方式