首页 > 其他分享 >SpringBean的理解和使用

SpringBean的理解和使用

时间:2024-07-05 15:00:57浏览次数:21  
标签:初始化 实例 Spring exampleService SpringBean Bean 理解 使用 ExampleService

首先,什么是bean?bean是一个核心的概念,它是由IOC(控制反转)容器管理的实例对象,

简单的说,就是通过配置文件或者注解的形式去标记的java类的实例,然后由Spring去对这些实例进行创建,初始化,装配,依赖注入和生命周期的管理。

实例化:Spring通过反射机制创建Bean的实例。
依赖注入(DI):Spring自动将Bean依赖的其他Bean注入到需要它们的地方,无需硬编码创建依赖对象。
配置与管理:Bean的配置可以在XML文件中或通过注解(如@Component、@Service、@Repository、@Controller)完成,Spring读取这些配置来了解如何创建和管理Bean。
生命周期管理:Spring管理Bean从创建到销毁的整个过程,包括初始化回调、销毁回调等。

 怎么使用Bean?

1.定义Bean:
XML配置:在Spring的XML配置文件中使用<bean>标签定义。

 <bean id="exampleBean" class="com.example.ExampleClass"/>

注解配置:在类上使用@Component系列注解(如@Service、@Repository、@Controller),并在配置类中使用@Bean注解。

     @Service
     public class ExampleService {}
     
     @Configuration
     public class AppConfig {
         @Bean
         public ExampleService exampleService() {
             return new ExampleService();
         }
     }

 2.注入Bean:
Field注入:直接在需要使用Bean的类的字段上使用@Autowired或@Resource注解。

   @Autowired
     private ExampleService exampleService;

Setter注入:在setter方法上使用@Autowired注解。

     private ExampleService exampleService;
     
     @Autowired
     public void setExampleService(ExampleService exampleService) {
         this.exampleService = exampleService;
     }

构造器注入:提高代码的可测试性和清晰度。 

     private final ExampleService exampleService;
     
     @Autowired
     public YourClass(ExampleService exampleService) {
         this.exampleService = exampleService;
     }

3.使用Bean:一旦Bean被Spring容器创建并注入到需要它的类中,就可以直接使用这个Bean实例来执行业务逻辑。

什么是bean的生命周期?

Bean的生命周期
Bean定义的载入:
Spring容器从配置源(如XML配置文件、注解、Java配置类)中读取Bean的定义信息。
Bean实例化:
根据Bean定义,Spring使用Java反射机制创建Bean实例。这一步骤相当于执行了new操作。
属性注入(依赖注入DI):
Spring根据Bean定义中的依赖关系,通过反射或JDK动态代理为Bean实例注入所依赖的其他Bean或值。这包括自动装配(如@Autowired)和显式配置的属性值。
Aware接口回调:
如果Bean实现了Spring的Aware接口(如BeanNameAware、BeanFactoryAware、ApplicationContextAware等),Spring会调用这些接口的方法,让Bean知道它所在的环境信息,如Bean的名称、BeanFactory或ApplicationContext。
初始化前处理:
在任何自定义初始化代码执行之前,如果Bean配置了@PostConstruct注解的方法,或在XML中定义了init-method,Spring会调用这些方法。
初始化Bean:
Spring调用初始化方法来完成Bean的初始化工作。这包括实现InitializingBean接口的afterPropertiesSet方法,或者自定义的初始化方法。
Bean注册到容器:
初始化完成后,Bean被注册到Spring容器中,此时Bean可以被应用程序使用。
使用Bean:
应用程序通过Spring容器获取Bean实例并使用它。
销毁前处理:
当容器关闭或Bean不再需要时,如果Bean实现了DisposableBean接口或配置了destroy-method,Spring会在Bean销毁前调用这些方法。
Bean销毁:
最后,Spring负责清理和销毁Bean实例,释放资源。

什么是IOC?

在 Spring 中,类的实例化、依赖的实例化、依赖的传入都交由 Spring Bean 容器控制,而不是用 new 方式实例化对象、通过非构造函数方法传入依赖等常规方式。实质的控制权已经交由程序管理,而不是程序员管理,所以叫控制反转。

标签:初始化,实例,Spring,exampleService,SpringBean,Bean,理解,使用,ExampleService
From: https://blog.csdn.net/mjmzsq777/article/details/140208024

相关文章

  • 手写数字识别-使用TensorFlow构建和训练一个简单的神经网络
    下面是一个具体的Python代码示例,展示如何使用TensorFlow实现一个简单的神经网络来解决手写数字识别问题(使用MNIST数据集)。以下是一个完整的Python代码示例,展示如何使用TensorFlow构建和训练一个简单的神经网络来进行手写数字识别。MNIST数据集的训练集有60000个样本:Python代码i......
  • 解决BitBucket仓库较大拉取失败,使用SSH拉取
    HTTPS拉取如果使用的是https拉取,可使用以下命令尝试,如果还是失败,可使用ssh拉取gitclone--depth=1xxxx.git--depth=1:拉取最近1次提交记录,这样拉取的文件较小;1是可以更改的如果想拉取指定分支的可以使用,master换成你的分支名即可gitclone-bmaster--depth=1xxx.g......
  • 断点续传:使用java对大文件进行分块与合并
    通常我们下载上传的视频文件比较大。虽然https协议没有规定上传文件大小的限制,但是网络的质量,电脑硬件的参差不齐可能会导致大文件快要上传完成的时候突然断网了要重新上传,非常影响用户体验。以此我们引入了断点续传的功能。什么是断点续传呢?就是我们在上传下载文件的时候,将一个......
  • Git 的使用
    1.目标了解Git基本概念能够概述git工作流程能够使用Git常用命令【会】熟悉Git代码托管服务能够使用idea操作git【会】2.什么是版本控制器版本控制(Revisioncontrol)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以......
  • bootstrap-fileinput 使用
    参考文档:http://www.bootstrap-fileinput.com/options.html视频和图片上传和展示:<divclass="form-grouprow"><labelfor="video_path"class="col-sm-2col-form-label"><spanclass="text-danger">*<......
  • 从零开始使用WordPress搭建个人网站并一键发布公网详细教程
    文章目录前言1.搭建网站:安装WordPress2.搭建网站:创建WordPress数据库3.搭建网站:安装相对URL插件4.搭建网站:内网穿透发布网站4.1命令行方式:4.2.配置wordpress公网地址5.固定WordPress公网地址5.1.固定地址访问WordPress前言本文主要介绍如何在LinuxUbuntu......
  • ipython的使用技巧整理
    IPython是一个强大的交互式Python环境,提供了许多高级功能和快捷键,以下是非常详细的IPython使用技巧整理,覆盖了每个知识点(但本文是基于有一定基础的同学看的):IPython的使用基础:一、安装与基本操作安装Anaconda建议直接下载安装Anaconda,其中包含丰富的库,以及我们需要使用......
  • ansible使用手册
    Connectionmethodsanddetails—AnsibleCommunityDocumentation1buildyourinventory1.1Thedefaultlocationforthisfileis/etc/ansible/hosts.Youcanspecifyadifferentinventoryfileatthecommandlineusingthe-i<path>optionorinco......
  • 使用systemctl管理磁盘挂载
    1.找到磁盘的UUID首先,找到/dev/sda的UUID。使用blkid命令:blkid/dev/sda输出示例:/dev/sda:UUID="e6c123d8-1234-4b62-9e4b-e2f235d31542"TYPE="ext4"假设UUID是e6c123d8-1234-4b62-9e4b-e2f235d31542。2.创建挂载点确保挂载点/home/nvidia/aibox已经存......
  • 做了一款服务网络安全的多端系统。内置AI(gpt4o)/ai绘画(sd)/ChatTTS,无需登陆免费使用
    上一篇魔盒介绍文章已被我删除,因为本次重新做了产品定位,之前定位有点混乱先上链接之前有个哥们说做了app还不如先做网站,因为不方便下载,这次做了哈。重点:里面有gpt4o,充了几十美元反正也用不完,给大家用了网页端:https://mgb.abyssdawn.com/H5端:https://mgb-h5.abyssdaw......