spring注册bean方式总结

news2025/1/18 11:02:11

从前天开始气温飞升,三十七八度,这谁受得了,看看代码降降温~

文章目录

  • 什么是注册bean
  • @Autowired、@Resource及@Inject等
  • @Component及@Service等
  • @Configuration及@Bean
  • spring.factories文件
  • @Import和ImportSelector使用
  • @Import及ImportBeanDefinitionRegistrar
  • 以上(方便跳转)

什么是注册bean

Spring 容器是 Spring 框架的核心。容器将创建对象,把它们连接在一起,配置它们,并管理他们的整个生命周期从创建到销毁。Spring 容器使用依赖注入(DI)来管理组成一个应用程序的组件。这些对象被称为 Spring Beans
IOC 容器具有依赖注入功能的容器,它可以创建对象,IOC 容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。通常new一个实例,控制权由程序员控制,而"控制反转"是指new实例工作不由程序员来做而是交给Spring容器来做。
而注册bean其实粗暴理解就是把bean放到IOC容器内。(就是这么简单)
话不多说,也没啥可说,直接列举方式,不做原理说明:

@Autowired、@Resource及@Inject等

其实这些注解并不是标准意义的注册bean方式,这些是在bean实例化完成后进行属性注入时候所使用的,但是也可以列为注册bean的方式,比较简单就不列举了,想要了解关于@Autowired及@Resource相关的可以看之前的文章:@Autowired和@Resource原理源码知识点详解

@Component及@Service等

需要配合@ComponentScan使用,保证可以扫描到,其实对于spring boot项目来说,保证Application启动类的路径为需要扫描组件上级路径即可。(很简单不具体说了啊)

@Configuration及@Bean

在这里插入图片描述
默认bean的名称就是其方法名,上面代码就是注册了一个名称为phliServiceBean,类型为PhliServiceImpl的bean。当然也可以指定名称:
在这里插入图片描述

@Bean注解说明:

  • @Bean 注解作用在方法上
  • @Bean 指示一个方法返回一个 Spring 容器管理的 Bean,也就是说方法返回值就是给Springr容器装配的bean
  • @Bean 一般和 @Component 或者 @Configuration 一起使用,也可以在 @Service 里使用,没有特定要求,主要看项目的需求。
  • @Bean 注解默认作用域为单例 singleton 作用域,可通过 @Scope(“prototype”) 设置为原型作用域

spring.factories文件

spring.factories文件是Spring Boot自动配置的核心文件之一,它的作用是将各种自动配置类与对应的配置类集中在一起,方便Spring Boot自动装配。在Spring Boot启动时,它会扫描classpath下所有的spring.factories文件,加载其中的自动配置类,并将它们注入到Spring ApplicationContext中,使得项目能够自动运行。该文件的格式为键值对,键是自动配置类的全限定名,值是该自动配置类所对应的配置类的全限定名,如:

org.springframework.context.ApplicationContextInitializer=\
cn.ph.software.initial.MyselfApplicationContextInitializer

org.springframework.context.ApplicationListener=cn.ph.software.listener.TestListener

自定义初始化器MyselfApplicationContextInitializer代码如下(举个例子):
在这里插入图片描述

简单说下原理:

  1. 查看@SpringBootApplication注解。
  2. 查看@EnableAutoConfiguration注解。
  3. @Import(AutoConfigurationImportSelector.class)查看AutoConfigurationImportSelector类。
  4. 可以看到AutoConfigurationImportSelector类实现了DeferredImportSelector接口。
  5. 而DeferredImportSelector接口继承了ImportSelector接口。ImportSelector接口有如下方法:String[] selectImports(AnnotationMetadata importingClassMetadata);
  6. 查看AutoConfigurationImportSelector类的selectImports方法:在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    可以看到最后调用loadFactoryNames( )方法,这个方法的逻辑就是扫描pom文件中引入的其他starter中的spring.factories文件。

@Import和ImportSelector使用

ImportSelector接口是spring boot提供的接口,包含一个用于代码方式注册多个bean的方法,spring boot内部的DeferredImportSelector就是该接口子接口,其实在上一个节点中已经有所体现,最经典的使用就是@EnableAutoConfiguration注解,通过实现ImportSelector接口,然后在selectImports方法内返回所需要注册类的全限定名。
在这里插入图片描述
AutoConfigurationImportSelector就是实现了ImportSelector接口。
自定义实现:
在这里插入图片描述
配合@Configuration注解使用。

@Import及ImportBeanDefinitionRegistrar

ImportBeanDefinitionRegistrar,该接口主要用来注册beanDefinition,许多需要集成的第三方框架都需要实现该接口执行registerBeanDefinitions方法然后配合@Import将特定bean注册到spring容器中。
当然也包括spring许多@Enable相关的注解也用到了这种方式,最常见的就是动态代理相关注解:@EnableAspectJAutoProxy。接下来看下该注解源码:
在这里插入图片描述
看下AspectJAutoProxyRegistrar类:
在这里插入图片描述

BeanDefinitionRegistry 是一个接口,它定义了关于 BeanDefinition 的注册、移除、查询等一系列的操作。可以通过执行 registerBeanDefinition 方法,将Bean的名称和对应的BeanDefinition放入容器中,后续获取Bean也是从这个容器中获取,从而实现了bean的注册。

以上(方便跳转)

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

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

相关文章

vue3项目国际化,你还不了解吗?

vue3使用的国际化库为:i18n 安装方式: npm install vue-i18nnext安装完成后在src文件夹下新建lang文件夹 在lang文件夹下新建需要语言转换的文件夹,这里以中文zh和英文en举例,在这两个文件夹下新建需要转换的语言 在zh的index.…

掌握ZBrush的19个建模技巧,让你的雕刻作品更逼真

ZBrush 是一个数字雕刻和绘画软件,它以强大的功能和直观的工作流程彻底改变了整个三维行业,按照世界领先的特效工作室和全世界范围内的游戏设计者的需要,以一种精密的结合方式开发成功的,它提供了极其优秀的功能和特色&#xff0c…

精简70%、内存不到1G,可以装在显卡上的Win11来了

Win11 经历了一两年的更新,现在有了许多 Win10 没有的功能特性。 但其中某些用不上的功能也让 Win11 显得臃肿甚至卡顿及各种谜之 Bug 。 对于配置较低或者有「洁癖」的用户来说,可能还在死守官方精简 Win10 LTSC 长期服务版。 Win11 LTSC 尚未发布&am…

Policy Gradient策略梯度算法详解

1. 基本思想 Policy Gradient策略梯度(PG),是一种基于策略的强化学习算法,不少帖子会讲到从基于值的算法(Q-learning/DQN/Saras)到基于策略的算法难以理解,我的理解是两者是完全两套思路&#…

S32K144低功耗休眠与唤醒实践总结

在做车载项目时,模块在常供电时需要维系随时可以被唤醒工作的状态,并且静态电流需要在3mA以内,当然在JTT1163标准中要求的是5mA以内。 目标明确了,在模块休眠时需要关闭一切不必要的资源消耗,只保留模块被唤醒的部分功…

K8S中master节点部署Pod处于Pending状态

查询一下pod信息: kubectl get pods -n kubernetes-dashboard根据name查看详细信息: kubectl describe pod dashboard-metrics-scraper-5b59d4bc6b-rxgqb -n kubernetes-dashboard这一句提示: Warning FailedScheduling 7s (x21464 ov…

Java进阶-查找算法

常见的七种查找算法: 1. 基本查找 ​ 也叫做顺序查找 ​ 说明:顺序查找适合于存储结构为数组或者链表。 基本思想:顺序查找也称为线形查找,属于无序查找算法。从数据结构线的一端开始,顺序扫描,依次将遍…

2023年5月北京/南京/西安/深圳DAMA-CDGA/CDGP数据治理认证报名

6月18日DAMA-CDGA/CDGP数据治理认证考试开放报名中! 考试开放地区:北京、上海、广州、深圳、长沙、呼和浩特、杭州、南京、济南、成都、西安。其他地区凑人数中… DAMA-CDGA/CDGP数据治理认证班进行中,报名从速! DAMA认证为数据管…

ARM-处理器模式(二)

文章目录 ARM 处理器模式工作模式模式切换内核寄存器R13_modeR14_modePC 各个模式对应的内核寄存器模式切换代码实现使用 mrs/msr 指令使用 cps 指令 ARM 处理器模式 ARMv7-a 处理器共有 9 种工作模式 工作模式 User:用户模式,非特权模式,大…

如果你想申请国家级高新技术企业

你必须首先满足国家支持的八大高新技术领域: 一、电子信息 二、生物学与新医学 三、航空航天 四、新材料 五、高科技服务业 六、新能源与节能 七。资源与环境 八、先进制造和自动化 如果您满足这八个领域中的一个,您就有资格申请高新技术企业。 …

有了 IP 地址,为什么还要用 MAC 地址?

MAC地址等价于快递包裹上的收件人姓名。 MAC地址更多是用于确认对方信息而存在的。就如同快递跨越几个城市来到你面前,快递员需要和你确认一下收件人是否正确,才会把包裹交给你一样。 IP66在线查IP地址位置:https://www.ip66.net/?utm-sour…

Bean基础配置?实例化方式?生命周期?

文章目录 1 bean基础配置1.1 bean基础配置(id与class) 1 bean基础配置1.1 bean基础配置(id与class)1.2 bean的name属性1.2 bean的name属性步骤1:配置别名步骤2: 根据名称容器中获取bean对象步骤3: 运行程序 1.3 bean作用范围scope配置(单例/非单例)1.3.1 验证IOC容器…

案例8:Java交易商城网站设计与实现开题报告

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

如何判断自己是否适合做项目管理?

如何转做项目管理?如何判断自己是否适合做项目管理?我们可以从项目管理的思维、能力、工具、书籍阅读四个方面入手—— 1.项目管理的思维 (1)系统思考 项目管理需要从一个系统的角度来看待问题,将复杂的项目分解为小…

CAD功能库CAD DLL v15 2023最新上线!改进3D格式文件

CAD DLL是一个为开发者打造的新版本CAD库,可在支持动态链接库技术的语言中添加CAD功能到应用程序中。 很高兴与大家分享,CAD Dll迎来了久违的更新,更新至v15,3D改进,还改进了 DWG 和 DXF 格式的导入,除此之…

商场地图怎么画最简单?商场导视图怎么做?

商场购物中心超大的经营规模能为广大顾客提供购物选择的同时,也面临着许多问题:购物体验差,顾客到店率低。以及数据缺失,无法为商家做营销决策提供依据等等,那么,如何快速提升商场店铺运营效果,…

指定日本|在读博士生获CSC资助赴日本全球环境战略研究所联合培养

R同学的学术背景较弱,虽参与过导师的项目,但自己没有相关文章发表。拟申请CSC联培项目,研究方向为农业经济可持续发展,指定日本并希望合作导师的研究与此相关联。最终我们用日本全球环境战略研究所(IGES)的…

关于多维图形在2D平面投影的个人理解

网上有很多关于多维空间的描述,这里分享一下我的个人理解 假设在二维空间中有两个图形,三角形、四边形,画面如下 以如下规律在三维空间展开 对于三角形,在三维空间中添加一点,和其连接,使得每个面都为三角…

盘点国产BI软件中,那些电商数据分析功能

老牌国产BI软件基本都是适用于所有行业,会为各行各业的提供智能数据可视化分析功能板块,那么,老牌国产BI软件之一的奥威BI软件又为电商数据分析提供了哪些功能板块,效果怎样? 1、提供标准化跨境电商分析方案 这套跨境…

高通Android 11 audio:音频服务创建以及播放的流程

1、音频服务初始化流程 当前版本:高通 Android 11 大致的创建流程如下: 经过上面的流程系统音频服务已经启动处于待命状态,如果有应用需要播放则会通过服务最终选择合适的硬件将声音播出,接下来按照上面的流程进行进一步的细分。 1.1 开机启动音频服务 音频服务在frame…