Spring的依赖注入是否会破坏信息隐藏?

str*_*ppi 14 java spring encapsulation dependency-injection

来自C++背景我必须掌握Java世界及其框架的复杂性.看一下DI的弹簧框架,我发现我很难相信我必须制作每个将受DI公众影响的setter功能.这种要求是否违反了信息隐藏原则?

当然我希望spring能够设置我的类的一些私有部分,但我当然不希望每个客户端类都能够做同样的事情.

我在这里错过了什么?

duf*_*ymo 15

我同意你的观点 - 这就是为什么我更喜欢构造函数注入.

  • 构造函数注入+1.表达依赖性更强,并消除了对"有趣"的设置者的需求 (2认同)
  • 并非所有属性都可能是正确操作类所必需的.在那种情况下,我总是通过二传手注入它们 (2认同)

oxb*_*kes 6

如果您对接口进行编码,则只需要在实现上公开setter.当您将接口注入系统的其他部分时,它们无法访问实现细节或对象的状态.


kro*_*old 5

您(可能)必须制作一个制定者,它会告知您外部的一些内部细节,但不需要制作一个吸气剂.所以你要透露一些信息,但不是太多; 除了预期目的之外,它对任何事情都没有用.

另外,我建议使用注释和@Autowired,在这种情况下,您不需要创建公共setter.