springboot多种方式注入bean获取Bean
springboot动态注入bean
- 1、创建Bean(demo)
- 2、动态注入Bean
- 3、通过注解注入Bean
- 4、通过config配置注入Bean
- 5、通过Import注解导入
- 6、使用FactoryBean接口
- 7、实现BeanDefinitionRegistryPostProcessor接口
1、创建Bean(demo)
@Data
public class Demo(){private String name;public void printName(){System.out.print("动态载入Bean的name属性"+this.name);}
}
2、动态注入Bean
@springbootTest
public class TestDemo(){@Testpublic void test(){// 获取ApplicationContextApplicationContext context = (ApplicatonContext)SpringApplication.run(App.class,args);// 获取BeanFactoryDefaultListableBeanFactory beanFactory = (DefaultListableBeanFactory)context.getAutowireCapableBeanFactory();// 创建Bean信息BeanDefinitiontBuilder beanDefinitiontBuilder = BeandefinitionBuilder.genericBeanDefinition(Demo.class);beandefinitionBulider.addPropertyValue("name","小猫咪");// 注入BeanbeanFactory.registerBeanDefinition("demo",beanDefinitionBuilder.getBeanDefinition());// 获取动态注入的BeanDemo demo = applicationContest.getBean("demo");demo.printName();// 移除动态注入的beanbeanFactory.removeBeanDefinition("demo"); }
}
3、通过注解注入Bean
直接在需要注入Bean的类上加这些注解
@RestController
@Service
@Component
4、通过config配置注入Bean
@Configuration标识这个类是一个配置类
@Bean表示这个方法返回的对象,和以前xml配置的Bean一样
5、通过Import注解导入
@import(xxx.class)可以嵌套在启动类上,也可以嵌套在config配置类上
@Import + 实现ImportSelector接口的selectImports方法
@Import + 实现ImportBeanDefinitionRegistrar 接口中的方法
@Import + 实现DeferredImportSelector接口的selectImports方法,DeferredImportSelector 它是 ImportSelector的子接口
6、使用FactoryBean接口
FactoryBean接口和BeanFactory千万不要弄混了,从名字其实可以大概的区分开,FactoryBean, 后缀为bean,那么它其实就是一个bean, BeanFactory,顾名思义 bean工厂,它是IOC容器的顶级接口,这俩接口都很重要。
package com.example.config;import com.example.dto.Demo;
import org.springframework.beans.factory.FactoryBean;public class DemoFactoryBean implements FactoryBean<Demo> {@Overridepublic Bike getObject() throws Exception {return new Demo();}@Overridepublic Class<?> getObjectType() {return Demo.class;}@Overridepublic boolean isSingleton() {return true;}
}
@Configuration
@Import({BikeFactoryBean.class,Dog.class,MyImportSelector.class})
public class MyConfig
7、实现BeanDefinitionRegistryPostProcessor接口
这种方式也是利用到了 BeanDefinitionRegistry,在Spring容器启动的时候会执行 BeanDefinitionRegistryPostProcessor 的 postProcessBeanDefinitionRegistry 方法,大概意思就是等beanDefinition加载完毕之后,对beanDefinition进行后置处理,可以在此进行调整IOC容器中的beanDefinition,从而干扰到后面进行初始化bean。
public class MyBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor {@Overridepublic void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.rootBeanDefinition(Demo.class).getBeanDefinition();registry.registerBeanDefinition("Demo", beanDefinition);}@Overridepublic void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {}
}
@Configuration
@Import({MyBeanDefinitionRegistryPostProcessor.class})
public class MyConfig {相关文章:
springboot多种方式注入bean获取Bean
springboot动态注入bean1、创建Bean(demo)2、动态注入Bean3、通过注解注入Bean4、通过config配置注入Bean5、通过Import注解导入6、使用FactoryBean接口7、实现BeanDefinitionRegistryPostProcessor接口1、创建Bean(demo) Data public class Demo(){private String name;publi…...
Markdown及其语法详细介绍(全面)
文章目录一、基本语法1.标题2.段落和换行3.强调4.列表5.链接6.图片7.引用8.代码9.分割线10表格二、扩展语法1.标题锚点标题 {#anchor}2.脚注3.自动链接4.任务列表5.删除线6.表情符号7.数学公式三、Markdown 应用1.文档编辑2.博客写作3.代码笔记四、常见的工具和平台支持 Markdo…...
在Linux和Windows上安装sentinel-1.8.5
记录:380场景:在CentOS 7.9操作系统上,安装sentinel-1.8.5。在Windows上操作系统上,安装sentinel-1.8.5。Sentinel是面向分布式、多语言异构化服务架构的流量治理组件。版本:JDK 1.8 sentinel-1.8.5 CentOS 7.9官网地址…...
面试攻略,Java 基础面试 100 问(十)
StringBuffer、StringBuilder、String区别 线程安全 StringBuffer:线程安全,StringBuilder:线程不安全。 因为 StringBuffer 的所有公开方法都是 synchronized 修饰的,而 StringBuilder 并没有 synchronized 修饰。 StringBuf…...
Zero-shot(零次学习)简介
zero-shot基本概念 首先通过一个例子来引入zero-shot的概念。假设我们已知驴子和马的形态特征,又已知老虎和鬣狗都是又相间条纹的动物,熊猫和企鹅是黑白相间的动物,再次的基础上,我们定义斑马是黑白条纹相间的马科动物。不看任何斑…...
51单片机简易电阻电感电容RLC测量仪仿真设计
51单片机简易电阻电感电容RLC测量仪仿真( proteus仿真程序讲解视频) 仿真图proteus7.8及以上 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0040 51单片机简易电阻电感电容RLC测量仪仿真51单片机最小系统的相关知识复位…...
[软件工程导论(第六版)]第6章 详细设计(课后习题详解)
文章目录1 假设只有SEQUENCE和DO-WHILE两种控制结构,怎样利用它们完成 IF THEN ELSE操作?2 假设只允许使用SEQUENCE和IF-THEN-ELSE两种控制结构,怎样利用它们完成DO WHILE操作?3 画出下列伪码程序的程序流程图和盒图:4…...
【2.19】算法题2:贪心算法、动态规划、分治
题目:给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。方法一:贪心算法原理:若当前指针所指元素之前的和小…...
【Redis】Redis 发布订阅通信模式 ( 发布订阅模式 | 订阅频道 | 发布消息 | 接收消息 )
文章目录一、发布订阅模式二、订阅频道三、发布消息四、接收消息一、发布订阅模式 Redis 中 存在一种 发布订阅 消息通信模式 : 消息发布者 : 负责发送消息 , 订阅者需要订阅该发布者频道 ;消息订阅者 : 负责接收消息 ; 订阅者 先 订阅 发布者频道 , 当 发布者 发布消息时 , …...
VNCTF 2023复现
文章目录象棋王子电子木鱼BabyGo象棋王子 签到题,直接在源码中找就ok。 找到一处编码,在控制台输出。 flag为:flag{w3lc0m3_t0_VNCTF_2023~~~} 电子木鱼 需要先理清代码逻辑。 存在三个路由。 一:/路由用来查看当前的功德数量…...
python基础知识有哪些需要背(记住是基础知识)我是初学者
大家好,小编来为大家解答以下问题,一个有趣的事情,一个有趣的事情,今天让我们一起来看看吧! 1、python基础知识有哪些需要背(记住是基础知识)我是初学者 或看好Python的广阔前景,或…...
Linux下TCP连接断开后不释放的解决办法
问题:在开发测试时发现断开与服务器端口后再次连接时拒绝连接。 分析:服务器上查看端口占用情况,假设端口为8888。 netstat -anp |grep 8888 发现端口8888端口显示被占用(ip为本机ip确定是上次连接)且状态为ESTABLI…...
1.关于嵌入式开发软件工程师的理解
学习嵌入式软件开发,首先要学会使用工具, 包括各种语言,C语言、FPGA、C等各种工具软件,各种芯片开发的IDE环境各种操作系统,Vxworks、Linux、Freertos等计算机基础,基本的框架结构,网络通信等编…...
1760字,让你拿捏 [‘列表‘]
如约而至,紧接着第一篇文章,小编将会陆续把自己精心做的全套Python笔记依次发放给大家,便于大家学习Python、期末备考、巩固基础等(这几期是公众号小插曲,后期发放编程技术的话主要还是会围绕Java来展开,感谢小伙伴们的…...
A562基于android的养老APP
需求信息: 1:家庭信息管理,包括家庭成员基本情况、性别、年龄、关系、工作单位、联系方式(手机号码、微信等); 2:个人健康数据管理,包括姓名、性别、年龄、关系、原工作单位、联系方式(手机号码…...
java面试题-并发基础
1.多线程的出现是要解决什么问题的? 本质什么?提高程序性能:单线程程序只能按照固定的顺序依次执行每个任务,无法同时处理多个任务。多线程技术可以在同一时间内执行多个任务,从而提高程序的运行效率和响应速度。提高程序的并发性ÿ…...
用纯C语言实现3D空间中的点坐标转化为屏幕二维点坐标,包含主视图、侧视图、俯视图、正等轴投影
要实现3D空间中的点坐标转换为屏幕二维点坐标,需要进行透视变换和投影变换。以下是一些基本的思路和示例代码,可以用于实现主视图、侧视图、俯视图、正等轴投影。 1. 主视图投影 主视图投影是指以一个点作为视点,从一个方向观察物体&#x…...
.sh脚本文件的执行方式
方法1: ./xxx.sh方法2: source xxx.sh方法3: bash xxx.sh方法4: sh xxx.sh初识shell,学习并记录...
Android 基础知识4-2.5View与VIewGroup的概念、关系与区别
1.概念: Android里的图形界面都是由View和ViewGroup以及他们的子类构成的: View:所有可视化控件的父类,提供组件描绘和时间处理方法 ViewGroup: View类的子类,可以拥有子控件,可以看作是容器 Android UI中的控件都是…...
【ESP 保姆级教程】玩转巴法云篇① ——初识巴法云
忘记过去,超越自己 ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2023-02-19 ❤️❤️ 本篇更新记录 2023-02-19 ❤️🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言📝🙏 此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请…...
探索二维非常规态型近场动力学代码
非常规态型近场动力学代码 纬度:二维; 时间积分:自适应动态松弛 or verlet-velocity; 零能抑制模式:silling method or Li pan method; 语言:MATLAB 代码注释详细,可适当在数值模拟领域,近场动力…...
双阶段目标检测是什么?有什么用?
一、引言在计算机视觉技术飞速发展的当下,目标检测作为核心分支,早已从实验室走向现实生活的方方面面,成为人工智能感知世界的关键入口。所谓目标检测,就是让计算机通过对图像、视频的分析,同步完成物体定位与物体分类…...
UndertaleModTool:解锁游戏修改的无限可能
UndertaleModTool:解锁游戏修改的无限可能 【免费下载链接】UndertaleModTool The most complete tool for modding, decompiling and unpacking Undertale (and other Game Maker: Studio games!) 项目地址: https://gitcode.com/gh_mirrors/un/UndertaleModTool…...
CentOS 7下PHP7.4编译安装全攻略:从依赖解决到常见报错处理
CentOS 7下PHP7.4编译安装全攻略:从依赖解决到常见报错处理 在Linux服务器环境中,PHP作为最流行的服务器端脚本语言之一,其安装方式通常有yum安装和编译安装两种选择。对于追求性能优化和功能定制的开发者来说,编译安装PHP7.4无疑…...
游戏资源解密工具:RPG Maker Decrypter零基础使用指南
游戏资源解密工具:RPG Maker Decrypter零基础使用指南 【免费下载链接】RPGMakerDecrypter Tool for extracting RPG Maker XP, VX and VX Ace encrypted archives. 项目地址: https://gitcode.com/gh_mirrors/rp/RPGMakerDecrypter RPG Maker Decrypter 是一…...
把 SAP ABAP CDS View Code Mapping 讲透:从 SEGW 映射到 SADL 运行时的关键机制与项目实践
很多 ABAP 开发者在第一次接触 CDS View Code Mapping 时,容易把它理解成一次普通的字段映射操作:左边是 CDS 字段,右边是 OData 属性,拖一拖、连一连,事情就结束了。真正进入项目以后,大家才会发现,这个动作背后牵动的是 SAP Gateway、SADL、DPC 运行时、关联导航,以及…...
黑苹果终极配置指南:使用Hackintool轻松搞定显卡驱动、音频和USB问题
黑苹果终极配置指南:使用Hackintool轻松搞定显卡驱动、音频和USB问题 【免费下载链接】Hackintool The Swiss army knife of vanilla Hackintoshing 项目地址: https://gitcode.com/gh_mirrors/ha/Hackintool 还在为黑苹果配置头疼吗?显卡驱动不工…...
脑电分析避坑指南:为什么你的PLV锁相值总等于1?希尔伯特变换与窄带滤波详解
脑电分析避坑指南:为什么你的PLV锁相值总等于1?希尔伯特变换与窄带滤波详解 在脑电信号分析领域,相位锁定值(Phase Locking Value, PLV)是衡量不同脑区神经振荡同步性的重要指标。但许多研究者在实际计算中常遇到一个令…...
Python实战:温度转换小工具开发(附GESP考试真题解析)
Python实战:温度转换小工具开发与GESP考试技巧精讲 温度转换是编程入门阶段的经典案例,也是GESP考试中常见的题型。本文将从零开始构建一个功能完整的温度转换工具,同时深入解析GESP考试中可能遇到的类似题型,帮助初学者掌握Pytho…...
Dinky 1.2.3实战:手把手教你构建带多数据源Connector的Flink 1.20镜像并推上K8s
Dinky 1.2.3实战:构建多数据源Flink镜像与K8s集成全指南 1. 为什么需要定制Flink基础镜像? 在实时数据处理领域,Flink已成为事实上的标准计算引擎。但官方镜像往往只包含基础组件,当我们需要连接MySQL、Kafka、Paimon等不同数据源…...
