IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Spring组件注册原理 -> 正文阅读

[Java知识库]Spring组件注册原理

AnnotationConfigApplicationContext类 :可以通过写一个方法把这个类当做参数的形式写进去,然后查看这个类里面有什么方法使用其中一个方法拿到这个我们所注册的的Bean,并返回一个数组,这个数组里面的内容返回的是全限定类名,就是这个类所在的路径 使用definitionNames来接收。
通过forEeach来循环遍历出来的就是类的包名+类名的全限定名字。
在这里插入图片描述
在这里插入图片描述

给容器中注册组件的方式有三种:
1)、包扫描 + 组件标注注解(@Controller/@Service/@Repository/@Component)【局限于我们自己祖册的bean】
2)、@Bean【导入第三方包里面的组件】
3)、@Import【快速给容器中导入一个组件】;
①、@Import容器中就会自动注册证组件,id默认是全类名
使用方式:
在这里插入图片描述
编写一个类。然后通过@Import注解的方式把这个类写进去,并通过AnnotationConfigApplicationContext这个类获取suoyoudeIOC容器,然后答应给出来就显示了。这个组件的名就是默认的全限定类名(包的路径+类的名字)
在这里插入图片描述
②、@ImportSelector:导入的选择器,返回需要导入的组件的全类名数组
ImportSelector接口里面有一个方法,使用数组接口存储类的全限定类型名
在这里插入图片描述
Annotationmetadata:当前标注@Import注解的类的所有注解信息,也就是说获取到的是Import里面的的每一个值,或还能获取其他注解。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
通过这个Annotationmetadata类/接口能获取到所有注解的属性、以及所有跟类有关的信息都能获取到。

使用方式: 先自定义一个MyInportSelector选择器 并实现 ImportSelector接口,里面的方法(自定义逻辑返回需要导入的组件) 通过Improt注解把我们自己定义的选择器写到这里面 在这里插入图片描述
接下来填写我们自己定义实现这个接口方法的逻辑来选择注册的组件,我们通过new String[]来写进去我们写的两个类(用全限定类名)
在这里插入图片描述
测试类:
在这里插入图片描述
这两个Blue 和Yellow不是直接导的,而且通过Import注解把我们自定义的选择器MyImportSelector类选择性的导入的。
在这里插入图片描述
查看是否已经把我们写的类成功注册到IOC容器里面,测试成功拿到了这个类的内存地址,说明成功注册进去
在这里插入图片描述
③、(手动注册Bean的方式)ImportBeanDefinitionRegistrar:接口,里面有一个方法,表示我们也可以自己添加一些组件,里面有两个传参;第一个AnnotationMetadata表示当前类的注解信息,第二个参数BeanDefinitionRegisty(Bean定义的注册类)表示所有Bean的定义都在这里注册,我们可以通过这个BeanDefinitionRegisty来给IOC容器注册一个Bean
在这里插入图片描述
使用的时候需要实现ImportBeanDefinitionRegistrar这个接口和里面的方法,而这个放里面有两个参数:第一个参数Annotationmetadata:当前类的注解信息;第二个参数BeanDefinitionRegistry:BeanDefinition注册类;把所有需要添加到容器中的Bean;调用BeanDefinitionRegistry.registerBeanDefinition方法手工注册进来
在这里插入图片描述
在这里插入图片描述
在我们自定义的BeanDenifitionRegistara类里面自定义我们注册Bean的逻辑:
beanDefinitionbean定义信息他需要传一个BeanDefinition,具体实现我们要看registerBeanDefinition这个方法里面的参数有一个BeanDefinition点进去我们发现也是一个接口,需要一个实现类来实现这个BeanDefinition接口;
在这里插入图片描述
通过这个实现类来实现这个beanDefinition接口在这里插入图片描述
找到一个beanDefinition这个参数的实现类RootBeanDefinition类来实现我们需要注册的组件Bean进去:
在这里插入图片描述
这段代码表示通过判断有没有这两个类来决定添不添加我们自定义的类到IOC容器里面,也就是Bean的注册,如果有就注册,没有就不起作用也不注册。

这个registry.registerBeanDefinition("rainBow",beanDefinition);在这个方法中,“RainBow”表示取的别名,registerBeanDefinition是一个接口,也会有其他的实现类来进行把我们指定的组件Bean注册进去。
在这里插入图片描述
通过调用registry.registerBeanDefinition方法来注册一个Bean,并指定bean名字。
4)、使用Spring提供得Factory(工厂Bean)
FactroyBean是一个接口,通过写入这个泛型把我们需要注册的类/组件Bean放到IOC容器里面,这个接口里面有三个方法,
①、默认获取到的是工厂getObject创建对象
②、要获取工厂Bean本身,我们需要给id前面加一个&符号
&colorFactryBean
在这里插入图片描述
调用这个方法T getObject() throws Exception;拿到一个对象返回一个泛型T,这个T就是我们要注册到IOC容器里面的Object类,用泛型代替在这里插入图片描述
使用方式:
我们自定义一个ColorFactoryBean类来实现FactoryBean<Color>这个接口,实现里面的三个方法:
第一个方法:返回一个color对象,这个对象会添加到容器中
在这里插入图片描述
第二个方法:返回对象的类型
在这里插入图片描述
第三个方法:判断这个组件是否是单例的,也就是这个对象是不是单例来判断;如果返回true,这个bean是单例的,在容器中只会保存一份;如果是false,表示是多实例的,每次获取都会创建一个新的bean(怎么创建呢?就是调用FactoryBean的getObject方法)
在这里插入图片描述
自定完之后我们需要把哦们自定义的这个工厂注册到BeanIOC容器里面:
在这里插入图片描述

把这个colorFactoryBean拿到并调用getBean方法查看一下这个Bean的类型,如果是true,那么测试的时候返回的就是true(工厂Bean获取调用的是getObject创建对象)
在这里插入图片描述
如果是false,那么每一次调用这个Bean都是从getObject方法里面重新创建一个Bean,每一次调用就创建一个新的Bean,得到的都不会一样
在这里插入图片描述
还可以通过常量“&”前缀来表示拿到这个Bean
在这里插入图片描述
通过加一个符号“&”,Spirng就会知道拿工厂Bean本身
在这里插入图片描述

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-10-03 16:57:32  更:2021-10-03 16:58:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 11:00:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码