据我了解,如果为 bean 提供了 scope="prototype" ,则会在每个请求上创建该类的新实例。那么为什么会有人使用spring来创建一个新对象而不是简单地编写
ClassName newBean = new ClassName();
我只使用弹簧来创建单例。
因为您可能想在原型中注入其他 bean。或者您可能希望将 AOP 方面应用于此 bean 的方法。或者你可能想让它成为事务性的。或安全。
如果只是简单地调用类的构造函数,它就不再是 Spring 管理的 bean,而且 Spring 对 bean 所做的一切都不是对手动构建的对象进行的。
我知道的一种情况是spring用作struts2的ObjectFactory。为每个 http 请求创建一个新的 Action 对象。
CMOE =“关闭修改,打开扩展。”
如果 ClassName 有任何行为变化,那么您可以扩展 ClassName 并在 config.xml 中提供新类的对象。
这不需要任何代码更改。
这是简单的原因之一。JB Nizet 所说的更具描述性和深入性。