Spring Bean介绍

news2024/9/21 18:57:40

目录

1.什么是bean

2.获取bean

3.bean的作用域

4.第三方bean

5.Bean的生命周期

6.Bean的种类

7.为什么使用Bean?


1.什么是bean

        Bean是Java世界中的一种组件,用于封装数据和逻辑,以便在应用程序中重用和维护。它不仅可以装在数据,还可以包含业务逻辑,甚至连接到数据库的操作。这样的设计让开发工作变得更加模块化,提高了代码的可重用性(由于封装的特性,Bean可以被多个程序或多个项目中复用,提高了开发效率。)和可维护性。通常情况下,Bean由私有属性和公有的访问方法(getter和setter)组成。这种结构让外部代码只能通过指定的接口与Bean交互,而不能直接访问内部状态,从而确保了数据的封装性和安全性。

        在Spring框架中,Bean是由Spring IoC容器来管理的对象。IoC即控制反转,是一种设计原则,用来减少代码之间的依赖关系。通过依赖注入的方式,Spring容器负责将依赖对象提供给需要的Bean,这样就降低了组件之间的耦合度。

2.获取bean

        默认情况下spring项目启动时,就会把bean都创建好放在IOC容器中,如果想要主动获取这些bean,可以通过如下方式:

  • 根据name获取bean
    Object getBean(String name)
  • 根据类型获取bean
    <T> T getBean(Class<T> requiredtype)
  • 根据name获取bean(带类型转换)
    <T> T getBean(String name,Class<T> requiredType)

        上述所说的(spring项目启动时,会把其中的bean都创建好)还会受到作用域延迟初始化的影响,这里主要针对于默认的单例非延迟加载的bean而言。

3.bean的作用域

Spring支持五种作用域,后面三种在web环境中才生效:

作用域说明
singleton容器内同名称的bean只有一个实例(单例)(默认)
prototype每次使用该bean时会创建新的实例(非单例)
request每个请求范围内会创建新的实例(web环境中,了解)
session每个会话范围内会创建新的实例(web环境中,了解)
application每个应用范围内会创建新的实例(web环境中,了解)

        可以通过@Scope注解来进行配置作用域:

@Scope("prototype")
@RestController
@RequestMapping("/depts")
public class DeptController{
}

注意事项:

  • 默认singleton的bean,在容器启动时被创建,可以使用@Lazy注解来延迟初始化(延迟到第一次使用时)。
  • prototype的bean,每一次使用bean的时候都会创建一个新的实例。
  • 在实际开发当中,绝大部分的Bean是单例的,也就是说绝大部分bean不需要配置scope属性。

4.第三方bean

@Bean

        如果要管理bean对象来自第三方(不是自定义的)、是无法用@Component及衍生注解声明bean的,就需要用到@Bean注解。

        若要管理这些第三方的bean对象,建议对这些bean进行集中分类配置,可以通过@Configuration注解声明一个配置类。

        不建议在启动类中添加其他代码,要保证其纯净性。

@SpringBootApplition
public class SpringBootWebConfig2Applition{
    @Bean//将方法返回值交给IOC容器管理,成为IOC容器的bean对象
    public SAXReader saxReader(){
        return new SAXReader();
    }
}

        config包下创建类 

@Configuration
public class CommonConfig{
    @Bean
    public SAXReader saxReader(){
    return new SAXReader();
    }
}

注意事项:

  • 通过@Bean注解的name注解或value可以声明bean的名称,如果不指定,默认bean的名称就是方法名
  • 如果第三方bean需要依赖其它bean对象,直接在bean定义方法中设置形参即可,容器会根据类型自动装配。

5.Bean的生命周期

  • 通过BeanDefinition获取bean的定义信息
  • 通过构造函数实例化bean
  • bean的依赖注入
  • 处理Aware接口(BeanNameAware,BeanFactoryAware,ApplicationContextAware)
  • Bean的后置处理器BeanPostProcessor——前置
  • 初始化方法(InitializingBean,init-method)
  • Bean的后置处理器BeanPostProcessor——后置
  • 销毁Bean

6.Bean的种类

在Java的世界里,有几种不同类型的Bean:

  1. 实体Bean(Entity Bean):通常用于表示数据库中的数据表,每个实体Bean对应表中的一行记录。

  2. 会话Bean(Session Bean):用户与系统交互时,会话Bean保存用户信息,充当的是用户的会话对象。

  3. 消息驱动Bean(Message-Driven Bean):用于处理异步消息,常与JMS(Java Message Service)一起使用。

7.为什么使用Bean?

使用Bean的好处包括但不限于:

  1. 解耦:Bean的使用减少了代码间的直接依赖,使得各部分更容易理解和维护。

  2. 提高可测试性:由于Bean是独立的组件,可以单独对Bean进行测试,提升整体代码的可测试性。

  3. 增强灵活性:Bean可以被任何支持Java的平台重用和扩展,这为应用程序提供了更大的灵活性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1943573.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis哨兵模式实践

本次环境为Centos7.6&#xff0c;redis-7.0.4 1&#xff1a;主备模式&#xff1a;即主节点的数据自动同步到从节点&#xff0c;但当主节点挂了&#xff0c;从节点需要手动设置为主节点&#xff0c;比较麻烦。 2&#xff1a;哨兵模式&#xff1a;当主节点挂了&#xff0c;自动投…

PCL-基于SAC_IA和NDT结合的点云配准算法

一、原理概述1.点云配准流程图2.快速点特征直方图FPFH3.采样一致性SAC_IA粗配准4.正态分布变换NDT精配准 二、实验代码三、实验结果四、总结五、参考 一、原理概述 1.点云配准流程图 2.快速点特征直方图FPFH 快速点特征直方图&#xff08;Fast Point Feature Histogram&#…

Oracle SQL:了解执行计划和性能调优

查询优化类似于制作完美食谱的艺术——它需要对成分&#xff08;数据&#xff09;、厨房&#xff08;数据库系统&#xff09;和使用的技术&#xff08;查询优化器&#xff09;有深入的了解。每个数据库系统都有自己的处理和运行 SQL 查询的方式&#xff0c;“解释”计划向我们展…

Mysql注意事项(一)

Mysql注意事项&#xff08;一&#xff09; 最近回顾了一下MySQL&#xff0c;发现了一些MySQL需要注意的事项&#xff0c;同时也作为学习笔记&#xff0c;记录下来。–2020年05月13日 1、通配符* 检索所有的列。 不建议使用 通常&#xff0c;除非你确定需要表中的每个列&am…

每日刷题记录(codetop版)

7.21 7.22 7.23 复习7.21和7.22

每日OJ_牛客DD1 连续最大和

目录 牛客DD1 连续最大和 解析代码 牛客DD1 连续最大和 连续最大和_牛客题霸_牛客网 解析代码 本题是一个经典的动规问题&#xff0c;简称dp问题&#xff0c;但这个问题是非常简单的dp问题&#xff0c;而且经常会考察&#xff0c;所以一定要把这个题做会。本题题意很简单&am…

探寻安全新时代:叉车AI智能影像防撞系统,守护生命之光

在繁忙的工业现场&#xff0c;叉车司机常常面临着视线受阻的困境&#xff0c;那些被货物遮挡的盲区&#xff0c;仿佛隐藏着无法预知的危险。然而&#xff0c;这样的隐患在一次惨痛的事故中暴露无遗&#xff0c;一名无辜的行人因叉车司机的视线受阻而不幸被撞身亡。这起悲剧让我…

机械设计基础B(学习笔记)

绪论 机构&#xff1a;是一些具备各自特点的和具有确定的相对运动的基本组合的统称。 组成机构的各个相对运动部分称为构件。构件作为运动单元&#xff0c;它可以是单一的整体&#xff0c;也可以是由几个最基本的事物&#xff08;通常称为零件&#xff09;组成的刚性结构。 构件…

python·数据分析基础知识

numpy 一个数值计算包 python列表与numpy矩阵区别 python中修改列表元素和列表相加 for循环 &#xff1a;[x1 for x in a] 多个元素需要用zip捆绑&#xff1a;[xy for(x,y) in zip(a,b)] numpy矩阵自动进行相应元素计算 np.array()1各元素1 ab各元素相加 a*b矩阵相乘或者是…

爬虫学习4:爬取王者荣耀技能信息

爬虫&#xff1a;爬取王者荣耀技能信息&#xff08;代码和代码流程&#xff09; 代码 # 王者荣耀英雄信息获取 import time from selenium import webdriver from selenium.webdriver.common.by import By if __name__ __main__:fp open("./honorKing.txt", "…

C++的UI框架和开源项目介绍

文章目录 1.QT2.wxWidgets3.Dear ImGui 1.QT QT的开源项目&#xff1a;QGIS&#xff08;地理信息系统&#xff09; https://github.com/qgis/QGIS?tabreadme-ov-file 2.wxWidgets wxWidgets的开源项目&#xff1a;filezilla https://svn.filezilla-project.org/svn/ wxWidg…

Matplotlib折线图绘制秘籍:让你的数据线条比过山车还刺激!

1. Matplotlib_折线图 折线图&#xff08;line chart&#xff09;是我们日常工作中经常使用的一种图表&#xff0c;它可以直观的反应数据的变化趋势 # 导包 import numpy as np import pandas as pd import matplotlib.pyplot as plt# 如果浏览器不显示图片&#xff0c;就需要…

面试场景题系列--(1)如果系统的 QPS 突然提升 10 倍该怎么设计?--xunznux

1. 如果系统的 QPS 突然提升 10 倍该怎么设计&#xff1f; 1.1 硬件的扩展微服务的拆分 如果所有的业务包括交易系统、会员信息、库存、商品等等都夹杂在一起&#xff0c;当流量一旦起来之后&#xff0c;单体架构的问题就暴露出来了&#xff0c;机器挂了所有的业务就全部无法…

kafka集群搭建-使用zookeeper

1.环境准备&#xff1a; 使用如下3台主机搭建zookeeper集群&#xff0c;由于默认的9092客户端连接端口不在本次使用的云服务器开放端口范围内&#xff0c;故端口改为了8093。 172.2.1.69:8093 172.2.1.70:8093 172.2.1.71:8093 2.下载地址 去官网下载&#xff0c;或者使用如…

达梦索引组织表和堆表

达梦数据库默认创建的是索引组织表&#xff0c;‌而Oracle数据库默认创建的是堆表。‌这两种表类型的区别主要体现在数据存储和组织方式上&#xff1a; 索引组织表(‌Index Organized Table, IOT)&#xff1a;‌ 索引组织表‌有且仅有一个聚簇索引键。索引组织表也称“普通表”…

UGUI优化篇--UGUI合批

UGUI合批 UGUI合批规则概述UGUI性能查看工具合批部分的特殊例子一个白色image、蓝色image覆盖了Text&#xff0c;白色image和Text哪个先渲染 Mask合批Mask为什么会产生两个drawcallMask为什么不能合批Mask注意要点 RectMask2D为什么RecMask2D比Mask性能更好主要代码RectMask2D注…

【笔记】学习记录

2024年7月23日 1.图的5中存储方式 2.二叉树的先序&#xff0c;中序&#xff0c;后序遍历。 学了图的存储方式之后&#xff0c;二叉树好像就是小菜一碟一样。注意一下名词的顺序就可以了。 所谓先中后序&#xff0c;就是先根&#xff0c;中根&#xff0c;后根的差别。没有其…

数据库练习-3

查询要求&#xff1a; 查询代码&#xff1a;

Apache2服务介绍

apache2 安装使用配置web访问配置虚拟主机配置代理正向代理反向代理 官网 互联网上排名第一的 HTTP 服务器&#xff0c;Apache HTTP 服务器项目致力于开发和维护适用于现代操作系统&#xff08;包括 UNIX 和 Windows&#xff09;的开源 HTTP 服务器。该项目的目标是提供安全、…

【系列教程之】1、点亮一个LED灯

1、点亮一个LED灯 作者将狼才鲸创建日期2024-07-23 CSDN教程目录地址&#xff1a;【目录】8051汇编与C语言系列教程本Gitee仓库原始地址&#xff1a;才鲸嵌入式/8051_c51_单片机从汇编到C_从Boot到应用实践教程 本源码包含C语言和汇编工程&#xff0c;能直接在电脑中通过Keil…