春季相关技术要点
最编程
2024-10-17 21:08:32
...
以下是对 Bean 的作用域和生命周期的详细说明:
一、Bean 的作用域
-
singleton
(单例):- 这是默认的作用域。在整个应用中,对于特定的 Bean 类型,只会创建一个实例。
- 无论在应用的哪个地方获取该 Bean,得到的都是同一个实例。
- 优点是减少了对象创建的开销,适用于无状态的服务类等。例如,配置文件读取类,在整个应用中只需要一个实例来读取配置信息。
- 缺点是如果 Bean 中有状态信息,可能会在不同的地方被意外修改。
-
prototype
(原型):- 每次从容器中获取该 Bean 时,都会创建一个新的实例。
- 适用于有状态的对象,每个使用者都需要自己独立的实例。比如,用户会话对象,每个用户的会话应该是独立的,不能共享同一个实例。
- 优点是可以保证每个使用者都有独立的对象,避免状态冲突。
- 缺点是对象创建的开销较大,特别是在频繁获取该 Bean 的情况下。
-
request
:- 在一次 HTTP 请求范围内有效。
- 每个 HTTP 请求都会创建一个新的 Bean 实例,请求结束后,该实例会被销毁。
- 适用于处理单个请求相关的对象,比如请求处理过程中的临时数据存储对象。
- 可以方便地在请求处理的不同阶段传递和共享数据。
-
session
:- 在用户会话范围内有效。
- 从用户登录到退出的整个会话期间,同一个 Bean 类型只会有一个实例。
- 适用于存储用户会话相关的信息,如用户登录状态、购物车等。
- 可以在用户的整个会话过程中保持数据的一致性。
-
global session
:- 在基于 portlet 的 Web 应用中,如果使用全局会话,这个作用域在全局会话范围内有效。
- 与普通的
session
作用域类似,但应用场景更特定,适用于 portlet 环境下的全局会话。
二、Bean 的生命周期
-
实例化:
- 这是 Bean 生命周期的第一步。容器根据配置信息创建 Bean 的实例。
- 在 Java 中,可以通过构造函数、工厂方法等方式进行实例化。例如,使用默认构造函数创建一个简单的 Java 对象。
- 代码中可能会通过反射机制调用构造函数来创建对象实例。
-
属性赋值:
- 在实例化之后,容器会将配置好的属性值注入到 Bean 实例中。
- 可以通过 setter 方法、构造函数参数等方式进行属性赋值。例如,在一个 Spring 应用中,通过 XML 配置文件或注解指定 Bean 的属性值,容器会自动将这些值注入到对应的 Bean 中。
- 这一步确保 Bean 具有正确的初始状态和配置。
-
初始化:
- 在属性赋值完成后,容器会调用 Bean 的初始化方法进行进一步的初始化操作。
- 可以通过实现
InitializingBean
接口的afterPropertiesSet
方法,或者在配置文件中指定init-method
方法来进行初始化。例如,在一个数据库连接池的 Bean 中,可以在初始化方法中建立数据库连接。 - 初始化操作可以包括资源的初始化、数据的加载、验证等。
-
使用:
- Bean 被应用程序使用,执行其特定的业务逻辑。
- 在应用程序中,可以通过依赖注入等方式获取 Bean 实例,并调用其方法来完成各种任务。例如,在一个服务层的 Bean 中,提供业务逻辑的实现方法,供控制器层调用。
-
销毁:
- 当 Bean 不再需要时,容器会调用其销毁方法进行清理操作。
- 可以通过实现
DisposableBean
接口的destroy
方法,或者在配置文件中指定destroy-method
方法来进行销毁操作。例如,在一个数据库连接池的 Bean 中,可以在销毁方法中关闭数据库连接,释放资源。 - 销毁操作确保资源的正确释放,避免内存泄漏等问题。
三、代码
在 Spring Boot 中,可以使用注解来指定 Bean 的作用域。Spring 中主要有以下几种作用域:
1、singleton(单例)作用域
这是默认的作用域。在整个应用中,一个特定类型的 Bean 只有一个实例被创建。
使用方式如下:
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
@Component
@Scope("singleton")
public class SingletonBean {
//...
}
2、prototype(原型)作用域
每次请求这个类型的 Bean 时,都会创建一个新的实例。
示例代码:
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
@Component
@Scope("prototype")
public class PrototypeBean {
//...
}
三、request 作用域
在一次 HTTP 请求中,一个 Bean 实例被创建并只在该请求内有效。通常在 Web 应用中使用。
要使用 request 作用域,需要在配置类中启用@EnableWebMvc
注解,并确保使用了AnnotationConfigWebApplicationContext
来加载配置类,或者在 XML 配置中进行相应的配置。然后可以这样定义 Bean:
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
@Component
@Scope("request")
public class RequestScopedBean {
//...
}
四、session 作用域
在一个用户会话期间,一个 Bean 实例被创建并只在该会话内有效。同样通常在 Web 应用中使用。
配置和使用方式与 request 作用域类似:
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
@Component
@Scope("session")
public class SessionScopedBean {
//...
}
通过使用@Scope
注解,可以方便地指定 Bean 的作用域,以满足不同的应用场景需求。
推荐阅读
-
春季相关技术要点
-
Java 读取单词,作为私有知识库做 RAG 问答检索和生成技术(RAG),可以提高文本的准确性和企业数据的相关性
-
RAG 系统复习练习详解版:Coze 和相关产品回顾与比较,以及下一代 RAG 技术
-
复习经验分享《一、问答自测》(408,相关前沿技术)
-
梳理轨迹预测相关文献:探索多样性轨迹、车辆轨迹与图神经网络、潜码技术
-
数字电子技术学习要点梳理
-
深入理解半导*造过程:刻蚀技术及其相关设备
-
【摩尔线程+Colossal-AI强强联手】MusaBert登上CLUE榜单TOP10:技术细节揭秘 - 技术实力:摩尔线程凭借"软硬兼备"的技术底蕴,让MusaBert得以从底层优化到顶层。其内置多功能GPU配备AI加速和并行计算模块,提供了全面的AI与科学计算支持,为AI推理和低资源条件下的大模型训练等场景带来了高效、经济且环保的算力。 - 算法层面亮点:依托Colossal-AI AI大模型开发系统,MusaBert在训练过程中展现出了卓越的并行性能与易用性,特别在预处理阶段对DataLoader进行了优化,适应低资源环境高效处理海量数据。同时,通过精细的建模优化、领域内数据增强以及Adan优化器等手段,挖掘和展示了预训练语言模型出色的语义理解潜力。基于MusaBert,摩尔线程自主研发的MusaSim通过对比学习方法微调,结合百万对标注数据,MusaSim在多个任务如语义相似度、意图识别和情绪分析中均表现出色。 - 数据资源丰富:MusaBert除了自家高质量语义相似数据外,还融合了悟道开源200GB数据、CLUE社区80GB数据,以及浪潮公司提供的1TB高质量数据,保证模型即便在较小规模下仍具备良好性能。 当前,MusaBert已成功应用于摩尔线程的智能客服与数字人项目,并广泛服务于语义相似度、情绪识别、阅读理解与声韵识别等领域。为了降低大模型开发和应用难度,MusaBert及其相关高质量模型代码已在Colossal-AI仓库开源,可快速训练优质中文BERT模型。同时,通过摩尔线程与潞晨科技的深度合作,仅需一张多功能GPU单卡便能高效训练MusaBert或更大规模的GPT2模型,显著降低预训练成本,进一步推动双方在低资源大模型训练领域的共享目标。 MusaBert荣登CLUE榜单TOP10,象征着摩尔线程与潞晨科技联合研发团队在中文预训练研究领域的领先地位。展望未来,双方将携手探索更大规模的自然语言模型研究,充分运用上游数据资源,产出更为强大的模型并开源。持续强化在摩尔线程多功能GPU上的大模型训练能力,特别是在消费级显卡等低资源环境下,致力于降低使用大模型训练的门槛与成本,推动人工智能更加普惠。而潞晨科技作为重要合作伙伴,将继续发挥关键作用。
-
构建三层交换与VTP、STP及Eth-Trunk融合实验:基于双核架构实现高效、稳定、冗余网络" 实验目标: 利用双核心结构,整合三层交换技术、VTP (Virtual Trunking Protocol)、生成树协议 (STP) 和以太网通道 (Eth-Trunk),达成网络高速切换、高可用性、高可靠性和备份连接,适用于双核心拓扑场景。 实验步骤: 1. VLAN划分与IP地址规划: - VLAN10:192.168.10.0/24,默认网关192.168.10.1 - VLAN20:192.168.20.0/24,默认网关192.168.20.1 - VLAN30:192.168.30.0/24,默认网关192.168.30.1 - VLAN40:192.168.40.0/24,默认网关192.168.40.1 2. MSW1三层交换机配置: - 开启三层路由功能:`MSW1(config)#ip routing` - 配置Trunk接口:`MSW1(config-if-range)#switchport trunk encapsulation dot1q; switchport mode trunk` - 设置VTP域和模式:`MSW1(config)#vtp domain test; vtp mode server; vtp password cisco; vtp version 2` - 创建并命名VLAN:`MSW1(config)#vlan 10; MSW1(config-vlan)#name caiwu; ... (为其他VLAN重复操作)` - 分配VLAN IP地址:`MSW1(config-if)#int vlan 10; ip address 192.168.10.1 255.255.255.0; no shutdown; ... (为其他VLAN重复操作)` - 配置生成树优先级:`MSW1(config)#spanning-tree vlan 10,20 root primary; MSW1(config)#spanning-tree vlan 30,40 root secondary` - 链接Eth-Trunk通道:`MSW1(config-if-range)#channel-group 1 mode on; ... (为其他相关接口重复操作)` 3. MSW2三层交换机配置类似MSW1,只需更改VLAN名称和IP地址以及相关端口配置即可。 通过以上步骤,两台三层交换机之间可通过Eth-Trunk实现高速数据交互,并通过VTP统一管理VLAN资源,STP则确保了网络流量的负载均衡,从而构建了一个高效、稳定且具备冗余保护的网络环境。
-
最新一次的技术抉择:工作流引擎及其相关知识点详解