可以将在IOC容器中创建的对象称为Singleton,如果是,为什么如果没有原因?
任何人都可以用简单的语言详细解释我IOC conatiner如何精确管理对象..
答案 0 :(得分:6)
你可以说弹簧单身不是单身。
Singleton有其有意义的范围,spring singleton范围是spring ioc容器。经典单身人士的有意义范围是ClassLoader。您可以在此处找到有关这些单身人士之间区别的更多信息:A spring singleton is not a singleton。
Spring在hashmap(Singleton Cache)中管理它的单例。当你从spring ioc容器中获取bean时,它首先检查bean是否已经存在于单例缓存中,如果是,它会从单例缓存中返回bean
答案 1 :(得分:1)
Spring(和其他ioc容器)提供不同的范围。其中一个范围是单例 - 即容器仅对对象进行一次实例化,并且只给出/注入一个实例。 Singleton是默认范围,因此从容器的角度来看,大多数bean确实是单例 - 即它们只有一个实例。
但是,还有其他范围,例如prototype
或基于网络的request
和session
。
在管理 bean中,容器执行以下操作:
@PostConstruct
和@PreDestroy
方法(或init和destroy方法,由任何可用方法配置)注意:您可以实例化定义为singleton bean的类的多个对象。容器仅对对象进行一次实例化,但您的代码不限于多次实例化它。
答案 2 :(得分:0)
您可能会发现this Google Groups thread有用。
答案 3 :(得分:0)
来自Spring Reference的可以在IOC中创建对象 容器可以称为Singleton if 是的,为什么如果没有原因?
来自Spring Reference的任何人都可以详细解释我 简单的说明IOC conatiner究竟如何 管理对象..
答案 4 :(得分:0)
我使用了更为通用的Singleton定义:
Singleton是一个对象 保证在给定的内部是唯一的 范围。
此范围是传统单例定义中的ClassLoader,但其他可能的范围是:
(我非常喜欢Seam方法Component.getInstance(Class, ScopeType),它允许您选择想要单身的范围。)