何时使用和何时不使用IOC/依赖注入?

3
我正在处理几个Spring MVC web应用程序,并使用getter / setter依赖注入,在我的app-servlet.xml文件中配置所有bean。
我相信我遵循了大多数属性和bean的约定,这些属性和bean被注入到我的控制器bean中,例如我的DAO和其他bean,这些都是我在applicationContext.xml或app-servlet.xml中指定的。
随着我的应用程序变得越来越复杂和庞大,这些文件中的bean填充了更多的被注入的属性。
我的问题是,什么是应该被注入的内容,什么是应该作为控制器的实例字段/变量指定的约定。
有时候我会面临这样的情况:我要在实际控制器中指定字段的值,还是将该值注入到该控制器的bean中。
例如,我正在使用Velocity模板库发送电子邮件。这里有一个指向我的Velocity模板目录的路径。我需要做以下之一:
在我的控制器中指定该值。
 private String basePath = "/path/to/velocity/templates";

我可以在我的控制器bean中将相同的值注入到该控制器中。

<property name="basePath" value="/path/to/velocity/templates"/>

在我的类中,我将注入此值的getter / setter。

我不确定每个的分界线在哪里。

2个回答

7

我通常基于以下几点进行依赖注入:

  1. 是否需要根据环境/部署更改此值(例如使用PropertyPlaceholderConfiguration)。
  2. 是否需要为测试mock一些东西。
  3. 是否有其他人可能在将来使用此类并想要执行上述操作。

如果不小心,那么您的配置可以变成一堆注入的属性(我更喜欢使用构造函数参数,以便我可以保证正确的实例化,但这是另一个故事)。以上指南在限制注入数量的同时允许灵活性方面效果很好。


4

不要一开始就计划“灵活性”。通常你是不需要的。

当真正需要时,再重构你的代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接