新手问题 为什么 Rails 中没有依赖注入的概念?

thxagain · 2017年03月04日 · 最后由 sammo 回复于 2019年07月04日 · 2823 次阅读

最近在做一个 Spring 项目,看到 Spring 中的 AOP 功能,感觉和 Rails 中的before_action很类似。

但是看到依赖注入、控制反转的概念,却发现很难在 Rails 框架中找到相应的组件/功能,这是为什么呢?

依赖注入是有的。只是没有那个容器和自动配置吧。

在 ruby 中,aop 可以简单地使用 alias_method/define_method/method_added 来实现,无需另外使用什么 InvocationHandler、cglib 那些繁复的东西

DI、IOC 在 java 中很着重我想是为了提醒 javaer 把各种动作抽象成一个个 interface,但在 ruby 中无需管你什么类型,只要你有这个 method id 就能调用,也就是 duck typing

ruby 本质上就是设计得这么动态

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 是控制反转实现的另一种方式

需要 登录 后方可回复, 如果你还没有账号请 注册新账号