首页 > 其他分享 >Spring中Bean的一些基础概念

Spring中Bean的一些基础概念

时间:2024-08-08 13:57:36浏览次数:10  
标签:状态 安全 Spring 概念 Bean 线程 单例

什么是 Spring Bean?

Bean 代指那些被 IoC 容器所管理的对象

什么是Spring IoC

IoC(Inversion of Control:控制反转) 是一种设计思想。IoC 的思想就是将原本在程序中手动创建对象的控制权,交由 Spring 框架来管理

  • 控制:指的是对象实例化的权力
  • 反转控制权交给外部环境(Spring 框架、IoC 容器)

Spring中Bean管理方式

Bean管理指的是两个操作(依赖注入),分别为:
Spring创建对象(依赖)
Spring注入属性(注入)
Bean 管理有两种方式 :
基于xml配置文件方式实现
在XML配置文件中,使用bean标签,标签里面添加对应的属性,就可以实现对象的创建。如下所示:

    <!-- 配置User对象 -->    <bean id="user" class="com.wyf.spring5.User"></bean>

在Bean标签中有很多属性**,如上例中的id、class。常见的属性及其含义如下:

  • id属性: 唯一标识(别名)
  • class属性:类全路径(包类路径)
    基于注解方式实现
  • @Component:通用的注解,可标注任意类Spring 组件
  • @Repository : 对应持久层即 Dao 层,主要用于数据库相关操作
  • @Service : 对应服务层,主要涉及一些复杂的逻辑
  • @Controller : 对应控制层,主要用于接受用户请求并调用 Service 层返回数据给前端页面

Bean 是线程安全的吗?

首先Spring框架中没有提供线程安全的策略。
Spring容器中的Bean都是根据自己写的类来创建的实例,Bean是否线程安全,与Spring容器无关

Bean 是否线程安全,取决于其作用域和状态
作用域是什么
在Spring定义的作用域中,有 prototype( 多例Bean )和 singleton ( 单例Bean)。多例的Bean,在每次 getBean 的时候都会创建一个新的对象。单例的Bean,在Spring容器中只会存在一个全局共享的实例

由于多例Bean每次都会创建新实例,所以线程之间不存在Bean共享的问题。因此,多例Bean是线程安全的。
单例Bean是所有线程共享一个实例,因此,可能会存在线程安全问题。最后单例Bean又分为无状态Bean和有状态Bean。

有状态和无状态:在多线程操作中只会对Bean的成员变量进行查询操作,不会对Bean中的成员变量的数据进行操作,这样的Bean称之为无状态Bean。无状态的单例Bean是不存在线程安全问题的。在多线程操作中如果会对Bean中的成员变量的数据进行操作,这样的Bean称之为有状态Bean。有状态的单例Bean就可能存在线程安全问题。

大部分 Bean 实际都是无状态(没有定义可变的成员变量)的(比如 Dao、Service),这种情况下, Bean 是线程安全的。

如何解决Bean的线程安全问题

对于有状态单例 Bean 的线程安全问题,常见的有两种解决办法:

  1. 在 Bean 中尽量避免定义可变的成员变量
  2. 在类中定义一个 ThreadLocal 成员变量,将需要的可变成员变量保存在 ThreadLocal 中(推荐的一种方式)。

Bean 的生命周期

创建 Bean 的实例
Bean 属性赋值
Bean 初始化
销毁 Bean

@Component 和 @Bean 的区别是什么?

  • @Component 注解作用于类
  • @Bean注解作用于方法。

标签:状态,安全,Spring,概念,Bean,线程,单例
From: https://blog.csdn.net/kiku1002149488/article/details/141025022

相关文章

  • AI入门之深度学习:基本概念篇
    1、什么是深度学习1.1、机器学习  图1:计算机有效工作的常用方法:程序员编写规则(程序),计算机遵循这些规则将输入数据转换为适当的答案。这一方法被称为符号主义人工智能,适合用来解决定义明确的逻辑问题,比如早期的PC小游戏:五子棋等,但是像图像分类、语音识别或自然语言翻译等......
  • springboot+vue农产品商城【程序+论文+开题】-计算机毕业设计
    系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展和互联网普及率的不断提高,电子商务已成为推动全球经济的重要力量。在农业领域,传统农产品销售模式面临着信息不对称、流通环节多、成本高、效率低下等问题,严重制约了农产品的市场竞争力与农民增收。因此,构建一个......
  • Spring格式化转换服务详解
    Spring格式化转换服务详解在Spring框架中,数据转换是一个常见的需求,尤其是在处理Web应用程序时。Spring提供了一个强大的转换服务ConversionService,它允许开发者自定义类型之间的转换规则。本文将通过一个具体的示例,详细解释如何在Spring应用程序中使用DefaultFormattingCon......
  • Spring Bean注册与配置详解
    SpringBean注册与配置详解在Spring框架中,Bean的注册与配置是一个核心概念。本文将深入探讨如何使用JavaConfig结合@ComponentScan来灵活地注册和管理SpringBeans。通过实际代码示例,我们将一步步了解Spring的组件扫描机制,以及如何利用不同的注解来定义Bean的作用域和行为......
  • springboot校园失物招领系统-计算机毕业设计源码17082
    目 录摘要1绪论1.1研究背景1.2 研究意义1.3论文结构与章节安排2 相关技术介绍2.1B/S结构2.2SpringBoot框架2.3MySQL数据库3系统分析3.1可行性分析3.2系统流程分析3.2.1数据新增流程3.2.2 数据删除流程3.3 系统功能分析3.3.1......
  • springboot仓库仓储管理系统-计算机毕业设计源码14514
    目录1绪论1.1选题背景与意义1.2国内外研究现状1.3论文结构与章节安排2系统分析2.1可行性分析2.1.1技术可行性2.1.2经济可行性2.1.3操作可行性2.1.4法律可行性2.2系统流程分析2.2.1系统开发流程2.2.2用户登录流程2.2.3系统操作流程2.2.4添......
  • spring RestTemplate忽略证书验证
    要使RestTemplate忽略SSL证书验证,你可以配置一个自定义的SSLContext,然后将其注入到RestTemplate使用的HttpClient中。以下是一个示例代码:importcom.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;importorg.apache.http.client.HttpClient;importorg.apac......
  • Springboot + ThymeLeaf发送邮件
    前言本文介绍了如何使用SpringBoot中的JavaMailSender发送邮件,包括配置发件箱相关参数以及如何结合模板引擎如Thymeleaf发送HTML邮件。1、导入jar包。<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId>......
  • Spring Boot 整合 SA-Token 使用详解
    SpringBoot整合SA-Token使用详解在现代Web开发中,用户认证与授权是构建安全应用的基础。SA-Token是一个轻量级的Java权限认证框架,它以其简洁的API设计、高效的执行效率以及丰富的功能特性,成为了众多开发者在SpringBoot项目中实现用户认证与授权的首选方案。本文将详细......
  • springboot集成 AI 实现图片辅助设计功能
    springboot集成AI实现图片辅助设计功能在SpringBoot中实现一个图片辅助设计功能,通常会涉及到图像处理、计算机视觉以及机器学习(AI)技术的应用。这样的系统可以帮助用户进行图像编辑、风格转换、自动设计布局等。以下是一个基本步骤和技术栈建议,用于在SpringBoot中构建图......