`

Re: 有关 EJB3,无状态会话Bean 与 Spring 依赖注入 Singleton 的困惑!

    博客分类:
  • Java
阅读更多
引用

这就是我的困惑所在。我们都知道,可以用无状态的 Singleton 来封装一些领域服务。比如说,UserService,就可以是一个 Singleton class。在实际使用时,可以用 IoC 容器的依赖注入方法得到它的一个(全 JVM 唯一的)Singleton 实例,然后再调用它里面的方法,比如说:


Singleton 并不是这样的吧 他只是在 servletcontext里面保存了这么一份 beans
每个request过来的时候,使用的是threadlocal
threadlocal 可以说是“拷贝”了 servletcontext里面的beans
可以说是一个副本
这样可以保证多个request使用的beans互相不影响(具体可以理解一下threadlocal )

threadlocal 的实现本身就类似 对象池 ,不过这个东西是语言支持的,而不是自己来实现的。
你说的synchronize 在一般bean上都不会起作用,原理也是这样 用的根本不是同一个对象(static得注意),除非在同一个request中存在多次调用产生 synchronize 现象。

引用
(全 JVM 唯一的)Singleton 实例
是否你的理解出偏差了呢?










分享到:
评论

相关推荐

    EJB3实战的源代码

    2. **有状态会话Bean**:与无状态会话Bean相反,有状态会话Bean能保留与特定用户会话相关的信息,适合处理需要持久会话状态的情况。 3. **实体Bean**:代表数据库中的记录,通过JPA进行持久化操作。实体Bean可以是...

    达内EJB3.0精典

    4. **会话 Bean**:无状态会话Bean(@Stateless)用于处理业务逻辑,不保存任何客户端状态,而有状态会话Bean(@Stateful)可以保持客户端会话期间的状态。此外,还有单例会话Bean(@Singleton),在整个应用程序中...

    使用eclipse通过jboss开发简单的ejb应用(jboss7.x & ejb3.x)

    3. **定义bean**:创建一个Java类,并添加适当的注解,例如`@Stateless`,以声明这是一个无状态会话bean。实现业务逻辑方法。 4. **创建接口**:对于客户端调用,创建一个接口,并将bean的方法声明为远程接口。 5....

    EJB3.0实例教程

    例如,`@Stateless`、`@Stateful`、`@Singleton`、`@MessageDriven`等注解分别表示无状态会话bean、有状态会话bean、单例bean和消息驱动bean。 **EJB3.0的主要特性** 1. **注解驱动**:EJB3.0通过注解实现组件的...

    Ejb 3 In Action

    - **新特性**:EJB 3.0中的新特性包括但不限于:无接口视图、容器管理实体、轻量级容器、本地会话Bean等。 - **简化编程模型**:EJB 3.0的目标之一是降低复杂性,使开发人员能够更轻松地编写和维护企业级应用程序。 ...

    EJB3.0__EJB3.0

    - **无状态Session Bean(Stateless Session Bean)**:对于多个客户端请求,服务器可能会复用相同的bean实例,不保留客户端状态。 2. **Message Driven Bean(MDB)**:用于处理消息队列(JMS)中的消息,常用于...

    Spring中依赖注入与容器

    在Spring框架中,依赖注入(Dependency Injection,简称DI)和控制反转(Inversion of Control,简称IoC)是核心概念,它们旨在简化组件之间的耦合,提高代码的可测试性和可维护性。IoC指的是应用程序的控制权由原本...

    最新EJB 3.0实例教程

    EJB可以是会话bean(Session Beans)、实体bean(Entity Beans)或消息驱动bean(Message-Driven Beans)。使用IDE如Eclipse或IntelliJ IDEA可以方便地进行这些操作。 **3. 数据库操作** EJB 3.0引入了实体bean的...

    Spring面试

    ### Spring框架概述与核心概念详解 #### 1. Spring框架简介 Spring框架是一个全面且功能强大的Java开发平台,旨在简化企业级应用的开发过程。它通过提供一系列的基础性支持和服务,帮助开发者解决常见的编程问题,...

    Spring 开发参考手册

    #### 四、依赖注入与Bean管理 - **依赖注入** (DI): 一种设计模式,用于降低组件间的耦合度,使代码更易于理解和维护。 - **属性注入** (Property Injection): 通过 setter 方法将依赖注入到 Bean 中。 - **构造...

    spring(一)–概念和历史/hellospring/IOC创建对象的方式/Spring配置/set注入/c命名和p命名空间注入/bean的作用域

    Spring的诞生与Rod Johnson的两本著作紧密相关。第一本是《Expert One-on-One J2EE Design and Development》,书中首次提出了Spring的核心思想,这本书在2002年出版。第二本是《Expert One-on-One J2EE Development...

    EJB学习历程(转自别人)

    无状态会话Bean适用于不维护用户会话信息的场景,而有状态会话Bean则可以跟踪用户的交互状态。 - **实体Bean(Entity Beans)** 实体Bean对应于数据库中的持久化对象,通常用于表示业务对象,如客户、订单等。...

    java面试题目

    - 会话bean代表了客户端的临时会话,分为Stateful(有状态)和Stateless(无状态)两种。 - Stateful Session Bean维护与特定客户端的会话状态,每个客户端请求对应一个唯一的bean实例。 - Stateless Session ...

    spring+jpa web开发例子

    5. **EJB3.0的关联**:虽然EJB 3.0不是一个主要技术,但可能会看到一些EJB的轻量级替代,比如使用`@Stateless`或`@Singleton`注解的无状态会话bean,它们在Spring容器中以类似的方式工作。 6. **部署和测试**:将...

    25个经典的Spring面试问答.docx

    Spring Bean有单例(singleton)、原型(prototype)、请求(request)、会话(session)和全局会话(global session)等作用域,每个作用域对应不同的对象创建和存活策略。 10. Spring的嵌入beans是什么? 嵌入...

    Spring中文帮助文档

    6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7...

    Spring API

    6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7...

    j2ee核心模式

    1. 无状态会话bean(Stateless Session Bean):用于执行业务逻辑,不保存任何与客户端相关的状态。 2. 有状态会话bean(Stateful Session Bean):能记住客户端状态,适用于需要保持会话状态的情况。 3. 实体bean...

Global site tag (gtag.js) - Google Analytics