【发布时间】:2018-10-28 05:12:46
【问题描述】:
默认情况下,Spring 框架将所有 bean 创建为 singletons。 这是否与基于模板(类)创建多个对象实例的基本面向对象编程概念相矛盾。
【问题讨论】:
标签: java spring oop architecture frameworks
默认情况下,Spring 框架将所有 bean 创建为 singletons。 这是否与基于模板(类)创建多个对象实例的基本面向对象编程概念相矛盾。
【问题讨论】:
标签: java spring oop architecture frameworks
好吧,如果你仔细想想,Spring 确实让 OOP 的一些实践变得非常困难/不可能,比如:
return new Cached(new ImageLoader("cat.png")).load();
或
return new Parrarel(new ImageLoader("cat.png"), new ImageLoader("dog.png")).load();
在 spring 中(以及大多数 DI 框架)真的很难(甚至不知道是否可能)。
【讨论】:
这是否与基于模板(类)创建多个对象实例的基本面向对象编程概念相矛盾。
不,不是。 Spring 在创建单例时使用了“模板”。
OO 原则说可以创建多个对象。如果没有保证,他们并没有说必须有一个类的多个实例。事实上,甚至还有一个经典的 OO 设计模式支持这一点1。
此外,当保证 Spring 框架可以创建多个实例时。
1 - Singleton 设计模式有其问题(配置与代码、可测试性等),但它不以任何方式违反 OO 编程原则。有趣的是,像 Spring 这样的 DI 框架实际上有助于解决 Singleton 模式的缺点。
【讨论】: