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

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

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

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

共收到 6 条回复

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

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

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