当前位置: 首页 > ai >正文

Spring的Bean和自动配置

目录

一、Bean的作用域

二、Bean的生命周期

三、Spring Boot自动配置

1.Spring加载Bean

1.1 解决方案

@ComponentScan

@Import

1.导入类

2.导入ImportSelector接口实现类

2.总结


 

一、Bean的作用域

在Spring中支持6种作用域,后四种在Spring MVC环境才生效。

作用域说明

singleton:单例作用域

每个Spring Ioc容器内同名称的bean只有一个实例(单例)(默认)

prototype:原型作用域(多例作用域)

每次使用该bean时会创建新的实例
request:请求作用域每个HTTP请求生命周期内,创建新的实例(web环境中)
session:会话作用域每个HTTP Session生命周期内,创建新的实例(web环境中)
Application:全局作用域每个ServletContext生命周期内,创建新的实例(web环境中)
websocket:HTTP Websocket作用域每个WebSocket生命周期内,创建新的实例(web环境中)

二、Bean的生命周期

生命周期指的是一个对象从诞生到销毁的整个生命过程,我们把这个过程就叫做一个对象的生命周期。

Bean的生命周期分为以下5个部分:

  1. 实例化(为Bean分配内存空间)
  2. 属性赋值(Bean注入和装配,比如@AutoWired)
  3. 初始化
  4. 使用Bean
  5. 销毁Bean


三、Spring Boot自动配置

SpringBoot的自动配置就是当Spring容器启动后,一些配置类,bean对象等就自动存入到了Ioc容器中,不需要我们手动去声明,从而简化了开发,省去了繁琐的配置操作。

SpringBoot自动配置,就是指SpringBoot是如何将依赖jar包中的配置类以及Bean加载到Spring IoC容器中的。

1.Spring加载Bean

Spring通过五大注解和@Bean 注解可以帮助我们把Bean加载到SpringIoc容器中,以上有个前提就是注解需要和SpringBoot启动类在同一目录下(@SpringBootApplication 注解标注的类就是SpringBoot项目的启动类)。

当我们引入第三方的Jar包时,第三方的Jar代码目录肯定不在启动类的目录下,如果告诉Spring帮我们管理这些Bean呢?

1.1 解决方案

我们需要指定路径或者引入的文件跟启动类一个目录 ,告诉Spring,让Spring进行扫描到。

常见的解决方案有两种:

1.@ComponentScan 组件扫描

2.@Imort 导入(使用@Import导入的类会被Spring加载到IoC容器中)

@ComponentScan

通过@ComponentScan注解指定Spring扫描路径

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;@ComponentScan("com.bite.autoconfig")
@SpringBootApplication
public class SpringAutoconfigApplication {public static void main(String[] args) {SpringApplication.run(SpringAutoconfigApplication.class, args);}
}

可以指定扫描多个包

@ComponentScan({"com.bite.autoconfig","com.example.demo"})

运行程序:

 可以看到,这次biteConfig Bean获取到了。

@Import

@Import 导入主要有以下几种形式:

1.导入类

2.ImortSelector 接口类

1.导入类
@Import(BiteConfig.class)
@SpringBootApplication
public class SpringAutoconfigApplication {public static void main(String[] args) {SpringApplication.run(SpringAutoconfigApplication.class, args);}
}

如果多了一些配置项时,可以导入多个类:

Import({BiteConfig.class, BiteConfig2.class})
@SpringBootApplication
public class SpringAutoconfigApplication {public static void main(String[] args) {SpringApplication.run(SpringAutoconfigApplication.class, args);}
}
2.导入ImportSelector接口实现类
  • ImportSelector 接口实现类
public class MyImportSelector implements ImportSelector {@Overridepublic String[] selectImports(AnnotationMetadata importingClassMetadata) {//需要导⼊的全限定类名return new String[]{"com.bite.autoconfig.BiteConfig","com.bite.autoconfig.BiteConfig2"};}
  • 启动类
@Import(MyImportSelector.class)
@SpringBootApplication
public class SpringAutoconfigApplication {public static void main(String[] args) {SpringApplication.run(SpringAutoconfigApplication.class, args);}
}

可以看到,导入ImportSelector接口实现类的方法实现让Spring 扫描得到。

2.总结

SpringBoot 自动配置原理的大概流程如下:

当SpringBoot程序启动时,会加载配置文件当中所定义的配置类,通过@Import注解将这些配置类全部加载到Spring的IoC容器中并交给IoC容器管理。

http://www.xdnf.cn/news/2474.html

相关文章:

  • linux两个特殊的宏 _RET_IP_ 和_THIS_IP_ 实现
  • GPUStack昇腾Atlas300I duo部署模型DeepSeek-R1【GPUStack实战篇2】
  • 单片机-89C51部分:5、点亮LED
  • 纳米级形貌快速测量,白光干涉仪助力摩擦磨损学科发展
  • Vue Router ——路由基础详解(一)
  • Qt中的全局函数讲解集合(全)
  • 软件模块依赖关系管理与优化
  • 基于 STM32 与 RFID 技术的医院医疗器械数字化精细管理系统设计
  • Redis内存管理三部曲:淘汰、过期与惰性删除的协同哲学
  • 01_Long比较值 类型相同值不同
  • 幂等性处理解决方案实战示例
  • MySQL 表的约束(一)
  • 第一个 servlet请求
  • 【看穿操控的套路】
  • 【记录maven依赖规则-dependencyManagement,dependencies】
  • Matlab 报错:尝试将 SCRIPT vl_sift 作为函数执行:
  • Java学习手册:Spring 框架核心概念
  • 如何通过OKR管理项目目标
  • 四 YARN配置和HBase配置
  • C++ 区分关键字和标识符
  • 职场提效小工具!
  • 【halcon】tuple_sort_index 和 select_obj 配合使用 详解
  • 小白学习python第四天
  • SpringBoot常用注解解析汇总
  • 基础学习:(9)vit -- vision transformer 和其变体调研
  • 03 基于 STM32 的温度控制系统
  • vscode eslint与vue-official冲突,导致点击的时候鼠标不会变成手型,一直在加载,但是不转到相应方法。
  • 二进制补码:给补码求原码
  • vue3中ref在js中为什么需要.value才能获取/修改值?
  • 智能文档抽取技术发展前沿与应用