- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我目前在一家大量使用 Spring Dependency Injection 的商店工作时正在重新阅读“Effective Java”。在阅读 Bloch 的书时,人们不禁会想起他对类中不变性的强调(他多次声明类应该尽可能不可变)。我不禁感到这与 Spring Dependency Injection(以及大多数 DI 引擎)对 javabeans 标准的依赖直接冲突。阅读“Spring in Action”中关于 DI 的章节似乎会让 Bloch 畏缩,因为它们的可变类由在您的权限范围之外实例化的对象组成,这些对象本身可能是可变的。
是不是 Bloch 的想法对 Spring 来说太新奇了? Spring模型被破坏了吗? Bloch 关于不变性的立场是否仅适用于编写库代码?在编写 Spring 代码时,我应该编写具有大量 getter 和 setter 的灵活对象还是将所有内容加载到构造函数中?
最佳答案
事实上,spring bean 在思想上是不可变的,即使你没有强制执行。
您只能为通过构造函数注入(inject)初始化的 final
字段提供 getter。
通常您不这样做,但您永远不应该重新分配由 DI 框架注入(inject)的 bean 的字段。这是因为除了它们的依赖项(并且它们的范围是单例的)之外,spring bean 通常不持有任何状态。当然,也有一些异常(exception),例如原型(prototype)和请求范围的 bean,它们很少见(例如,在 2 个大项目和 2 个中型项目中,我只使用了 1 个原型(prototype)范围的 bean)
关于java - 可变性和 Spring ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5732195/
我遇到了 python 问题..我有一个二叉树节点类型: class NODE: element = 0 leftchild = None rightc
这个问题已经有答案了: Local (?) variable referenced before assignment [duplicate] (3 个回答) 已关闭 4 年前。 我有一些来自初学者编
class TestClass(object): def __init__(self): self.value = 100 self.x = lambda: s
谁能解释为什么下面的代码会编译,但如果我注释掉一行,那么它不会,即使代码本质上在做同样的事情? struct OtherStruct { x: i32, } struct Inner { bl
我有一个在同一主机上运行的 TCP 客户端和服务器。客户端发送消息,服务器确认该消息,然后客户端发送下一条消息。在任何时刻,都只有一条未处理的未确认消息。消息大小为 1KB。家庭计算机运行CentOs
我是 Panda 的 Dataframe 的新手,如果有人可以通过以下示例向我简要讨论 DataFrame 的可变性,我将不胜感激: d1=pd.date_range('1/1/2016',perio
在 C++ 编程语言第 4 版的第 16.2.9.4 节“通过间接实现的可变性”中,有一个使用间接代替 mutable 关键字进行惰性求值的示例的草图。 struct cache { bool
我对 Haskell 了解不多,但从我读到的关于计算的可变性(例如:函数返回函数、复杂的 monad 和函数等)的内容来看,你似乎可以做很多元编程,即使在运行时。 如果像函数和 monad 这样的一切
在 Python 中,globals() 返回全局符号表的表示,而 locals() 返回本地状态的表示。虽然两者都返回字典,但对 globals() 的更改会在全局符号表中生效,而对 locals(
我正在关注斯坦福算法 MOOC 并尝试使用 Haskell 解决问题。许多算法需要大量的数据处理,纯解决方案的运行速度比人们为命令式语言引用的基准要慢得多。所以我觉得我需要使用可变数据结构。 大多数
在 react 井字游戏中 tutorial ,为什么他们必须使用 Array.slice()? handleClick(i) { const squares = this.state.square
在 react 井字游戏中 tutorial ,为什么他们必须使用 Array.slice()? handleClick(i) { const squares = this.state.square
在 C# 中,我想制作“智能”枚举,这在 Java 中是可能的,其中有更多信息附加到枚举值,而不仅仅是底层 int。我偶然发现了一个创建类(而不是枚举)的方案,如以下简单示例所示: public se
我是一名优秀的程序员,十分优秀!