目的:想在内存中加载一个单态队列。
做法:该队列做为spring的一个singleton Bean加载到Spring Container当中,在业务逻辑中,将对象装在单态队列中,获取队列中的元素是在Servlet中获取的,Servlet也是通过Spring DI得到的这个队列。
问题:但是这两个队列并不一样,前者在队列中装了一些元素,后者得到的队列却不包含任何元素。不知道是为什么,难道Spring Container和Servlet Container是分开的吗?
参考:看了一下spring的references,是这样说的:
Please be aware that Spring's concept of a singleton bean is quite different from the Singleton pattern as defined
in the seminal Gang of Four (GoF) patterns book. The classic GoF Singleton hardcodes the scope of an object
such that
one and only one instance of a particular class will ever be created per ClassLoader. The scope of the
Spring singleton is best described as
per container and per bean. This means that if you define one bean for a
particular class in a single Spring container, then the Spring container will create one and only one instance of
the class defined by that bean definition.
分享到:
- 2007-07-03 10:54
- 浏览 3611
- 评论(3)
- 论坛回复 / 浏览 (2 / 3407)
- 查看更多
相关推荐
在Spring容器初始化时,它会根据配置加载Bean的定义,并根据需要创建Bean实例。Bean的生命周期大致分为以下几个阶段:构造、初始化、正常使用、销毁。如果一个Bean被创建了两次,那么可能是在构造或初始化阶段出现了...
4. **启动后处理器(BeanPostProcessor)**:这些是特殊类型的Bean,它们在所有常规Bean实例化之后,但初始化之前进行处理。它们的实例化顺序由`@Order`注解决定,或者通过实现`Ordered`接口来控制。 5. **...
2. 容器会立即创建这些Singleton Bean实例,并将其保存在一个内部缓存中,这个过程称为早期初始化。 3. 当其他Bean需要依赖这个Singleton Bean时,容器直接从缓存中取出已创建的实例,无需再次创建。 Prototype ...
Spring允许自定义BeanPostProcessor,它们在Bean实例化后执行特定的处理,比如AOP代理。这些后处理器将在Bean实例化后,初始化前介入。 7. **Bean初始化**: 实例化完成后,Spring会执行Bean的初始化方法,包括...
- 如果Bean配置了AOP代理,如`@AspectJ`切面或基于接口的代理,那么在Bean实例化后,Spring会创建代理对象,代理对象负责拦截方法调用并执行相关的切面逻辑。 6. **Bean的销毁** - 对于单例Bean,Spring容器在...
在Spring框架中,Bean的作用域是决定如何管理和创建Bean实例的关键概念。本篇文章将深入探讨两种主要的作用域:singleton和prototype,并通过实例分析其用法和注意事项。 首先,`singleton`是Spring默认的作用域,...
- **Singleton**:Spring容器中只会存在一个Bean实例,所有对Bean的请求都会返回同一个实例。 - **Prototype**:每次请求都会创建一个新的Bean实例。 - **Request**:在Web应用中,每个HTTP请求都会创建一个Bean...
在Spring框架中,加载顺序是理解应用程序启动过程的关键部分,涉及到bean的实例化、初始化以及依赖注入等多个环节。本文将详细探讨Spring加载顺序,并结合`@PostConstruct`、`构造方法`以及`@Autowired`等关键注解...
单例Bean在整个应用中只有一个实例,而原型Bean每次请求都会创建新的实例。 7. **AOP**:面向切面编程是Spring的另一大特色,它允许我们在不修改源代码的情况下,添加额外的行为。例如,我们可以通过切面实现日志...
它提供两个方法:`postProcessBeforeInitialization()`和`postProcessAfterInitialization()`,分别在Bean初始化之前和之后调用,可以用来进行额外的处理或校验。 在Bean的定义中,我们可以使用`@Component`、`@...
BeanDefinition是一个接口,用来描述一个Bean实例,例如是SINGLETON还是PROTOTYPE,属性的值是什么,构造函数的参数是什么等。简单来说,通过一个BeanDefinition我们就可以完成一个Bean实例化。 BeanDefinition及其...
- `singleton`:默认作用域,Spring容器中只有一个Bean实例。 - `prototype`:每次请求都会创建一个新的Bean实例。 - `request`、`session`、`globalSession`:这些是在Web应用中使用的,分别对应HTTP请求、会话...
Singleton模式意味着每个Bean在Spring容器中只会存在一个实例。当你通过`ApplicationContext`获取一个配置为`scope="singleton"`的Bean时,无论你调用`getBean`多少次,都会返回同一个对象实例。例如,在`UserDao`的...
1. **单例(Singleton)**:这是默认的作用域,Spring容器只会创建一个Bean实例,所有对Bean的请求都会返回同一个实例。 2. **原型(Prototype)**:在每次请求时,Spring容器都会创建一个新的Bean实例。 3. **...
Bean的生命周期和作用域是Spring框架中两个非常重要的概念,它们决定了Bean的生命周期和作用域的管理方式。 一、Bean的生命周期 Bean的生命周期是指Bean从创建到销毁的整个过程。这个过程可以分为九个阶段: 1. ...
- singleton:默认的作用域,表示容器中只有一个Bean实例。 - prototype:每次请求都创建一个新的Bean实例。 - request:每个HTTP请求都会创建一个新的Bean实例,只适用于Web应用。 - session:在一个...
1. **实例化**:Spring容器在遇到一个Bean定义时,会通过反射机制创建Bean实例。如果Bean定义中有`factory-method`属性,那么Spring会调用指定的方法来实例化Bean,而不是使用默认的构造器。 2. **属性注入**:实例...
默认情况下,Bean是单例的(`singleton`),在整个Spring容器中只存在一个实例。还可以定义为原型(`prototype`),每次请求都会创建一个新的实例。 总结,Spring装配Bean的XML配置方式是Spring框架的基础,通过...
主要有两个关键组件:BeanFactory和ApplicationContext。BeanFactory是Spring的基础容器,它提供bean的实例化、作用域、依赖注入、生命周期管理等功能。ApplicationContext则是在BeanFactory基础上扩展,增加了更多...
singleton Beans 是指在 Spring 框架中每个Bean 只会被实例化一次,解决了循环依赖问题。但是,Spring 框架中不能解决非单例属性之外的循环依赖、构造器的循环依赖和prototype 作用域循环依赖。 在 Spring 框架中,...