与没有由bean di applicationcontext.getbean?管理的bean相比,使用@可配置的优点是什么?有谁列出赞成和反对的吗?
发布于 2009-12-15 03:17:35
我要拿-20来做这个。即使是臭名昭著的马丁·福勒( Martin Fowler )发明了“依赖注入”这个可怕的名字,也不认为它更适合于测试:
http://martinfowler.com/articles/injection.html
--人们偏爱依赖注入的一个常见原因是,它使测试变得更容易。这里的要点是,要进行测试,您需要轻松地用存根或模拟替换真正的服务实现。但是,在这里,依赖注入和服务定位器实际上并没有什么区别:两者都非常容易死掉。我怀疑这种观察来自于一些项目,在这些项目中,人们没有努力确保他们的服务定位器可以很容易地被替换。这就是持续测试的帮助所在,如果您不能轻松地将服务存根用于测试,那么这就意味着您的设计出现了严重的问题。
以下是我的反对意见:
总之,它不利于设计,不利于性能,不利于生产,不利于测试,不利于标准的制定。它有什么好处?这就像许多在很久以前就有可疑来源的愚蠢的规则和惯例,但我们仍然每天都盲目地遵循它们。这就是社会运转的原因。
编辑:转发到有关DI和测试Does using annotations to inject dependencies remove the main benefit of dependency injection(external configuration)?的新问题的链接
发布于 2009-12-15 01:48:34
执行applicationContext.getBean()完全违背了依赖注入的目的,因为不再是注入依赖项。应用程序上下文XML文件很好。基于注释的配置(自动配线)也很好。这样你也可以这样做:
Service service = new Service();或者更糟:
Service service = ServiceLocator.locate("service");这两种情况都会使您的代码难以测试。
https://stackoverflow.com/questions/1904745
复制相似问题