来自C++背景我必须掌握Java世界及其框架的复杂性.看一下DI的弹簧框架,我发现我很难相信我必须制作每个将受DI公众影响的setter功能.这种要求是否违反了信息隐藏原则?
当然我希望spring能够设置我的类的一些私有部分,但我当然不希望每个客户端类都能够做同样的事情.
我在这里错过了什么?
我同意你的观点 - 这就是为什么我更喜欢构造函数注入.
如果您对接口进行编码,则只需要在实现上公开setter.当您将接口注入系统的其他部分时,它们无法访问实现细节或对象的状态.
您(可能)必须制作一个制定者,它会告知您外部的一些内部细节,但不需要制作一个吸气剂.所以你要透露一些信息,但不是太多; 除了预期目的之外,它对任何事情都没有用.
另外,我建议使用注释和@Autowired,在这种情况下,您不需要创建公共setter.