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

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

记录&#xff1a;380场景&#xff1a;在CentOS 7.9操作系统上&#xff0c;安装sentinel-1.8.5。在Windows上操作系统上&#xff0c;安装sentinel-1.8.5。Sentinel是面向分布式、多语言异构化服务架构的流量治理组件。版本&#xff1a;JDK 1.8 sentinel-1.8.5 CentOS 7.9官网地址…...

面试攻略,Java 基础面试 100 问(十)

StringBuffer、StringBuilder、String区别 线程安全 StringBuffer&#xff1a;线程安全&#xff0c;StringBuilder&#xff1a;线程不安全。 因为 StringBuffer 的所有公开方法都是 synchronized 修饰的&#xff0c;而 StringBuilder 并没有 synchronized 修饰。 StringBuf…...

Zero-shot(零次学习)简介

zero-shot基本概念 首先通过一个例子来引入zero-shot的概念。假设我们已知驴子和马的形态特征&#xff0c;又已知老虎和鬣狗都是又相间条纹的动物&#xff0c;熊猫和企鹅是黑白相间的动物&#xff0c;再次的基础上&#xff0c;我们定义斑马是黑白条纹相间的马科动物。不看任何斑…...

51单片机简易电阻电感电容RLC测量仪仿真设计

51单片机简易电阻电感电容RLC测量仪仿真( proteus仿真程序讲解视频&#xff09; 仿真图proteus7.8及以上 程序编译器&#xff1a;keil 4/keil 5 编程语言&#xff1a;C语言 设计编号&#xff1a;S0040 51单片机简易电阻电感电容RLC测量仪仿真51单片机最小系统的相关知识复位…...

[软件工程导论(第六版)]第6章 详细设计(课后习题详解)

文章目录1 假设只有SEQUENCE和DO-WHILE两种控制结构&#xff0c;怎样利用它们完成 IF THEN ELSE操作&#xff1f;2 假设只允许使用SEQUENCE和IF-THEN-ELSE两种控制结构&#xff0c;怎样利用它们完成DO WHILE操作&#xff1f;3 画出下列伪码程序的程序流程图和盒图&#xff1a;4…...

【2.19】算法题2:贪心算法、动态规划、分治

题目&#xff1a;给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。子数组 是数组中的一个连续部分。方法一&#xff1a;贪心算法原理&#xff1a;若当前指针所指元素之前的和小…...

【Redis】Redis 发布订阅通信模式 ( 发布订阅模式 | 订阅频道 | 发布消息 | 接收消息 )

文章目录一、发布订阅模式二、订阅频道三、发布消息四、接收消息一、发布订阅模式 Redis 中 存在一种 发布订阅 消息通信模式 : 消息发布者 : 负责发送消息 , 订阅者需要订阅该发布者频道 ;消息订阅者 : 负责接收消息 ; 订阅者 先 订阅 发布者频道 , 当 发布者 发布消息时 , …...

VNCTF 2023复现

文章目录象棋王子电子木鱼BabyGo象棋王子 签到题&#xff0c;直接在源码中找就ok。 找到一处编码&#xff0c;在控制台输出。 flag为&#xff1a;flag{w3lc0m3_t0_VNCTF_2023~~~} 电子木鱼 需要先理清代码逻辑。 存在三个路由。 一&#xff1a;/路由用来查看当前的功德数量…...

python基础知识有哪些需要背(记住是基础知识)我是初学者

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;一个有趣的事情&#xff0c;一个有趣的事情&#xff0c;今天让我们一起来看看吧&#xff01; 1、python基础知识有哪些需要背&#xff08;记住是基础知识&#xff09;我是初学者 或看好Python的广阔前景&#xff0c;或…...

Linux下TCP连接断开后不释放的解决办法

问题&#xff1a;在开发测试时发现断开与服务器端口后再次连接时拒绝连接。 分析&#xff1a;服务器上查看端口占用情况&#xff0c;假设端口为8888。 netstat -anp |grep 8888 发现端口8888端口显示被占用&#xff08;ip为本机ip确定是上次连接&#xff09;且状态为ESTABLI…...

1.关于嵌入式开发软件工程师的理解

学习嵌入式软件开发&#xff0c;首先要学会使用工具&#xff0c; 包括各种语言&#xff0c;C语言、FPGA、C等各种工具软件&#xff0c;各种芯片开发的IDE环境各种操作系统&#xff0c;Vxworks、Linux、Freertos等计算机基础&#xff0c;基本的框架结构&#xff0c;网络通信等编…...

1760字,让你拿捏 [‘列表‘]

如约而至&#xff0c;紧接着第一篇文章&#xff0c;小编将会陆续把自己精心做的全套Python笔记依次发放给大家&#xff0c;便于大家学习Python、期末备考、巩固基础等(这几期是公众号小插曲&#xff0c;后期发放编程技术的话主要还是会围绕Java来展开&#xff0c;感谢小伙伴们的…...

A562基于android的养老APP

需求信息&#xff1a; 1&#xff1a;家庭信息管理,包括家庭成员基本情况、性别、年龄、关系、工作单位、联系方式&#xff08;手机号码、微信等&#xff09;&#xff1b; 2&#xff1a;个人健康数据管理,包括姓名、性别、年龄、关系、原工作单位、联系方式&#xff08;手机号码…...

java面试题-并发基础

1.多线程的出现是要解决什么问题的? 本质什么?提高程序性能&#xff1a;单线程程序只能按照固定的顺序依次执行每个任务&#xff0c;无法同时处理多个任务。多线程技术可以在同一时间内执行多个任务&#xff0c;从而提高程序的运行效率和响应速度。提高程序的并发性&#xff…...

用纯C语言实现3D空间中的点坐标转化为屏幕二维点坐标,包含主视图、侧视图、俯视图、正等轴投影

要实现3D空间中的点坐标转换为屏幕二维点坐标&#xff0c;需要进行透视变换和投影变换。以下是一些基本的思路和示例代码&#xff0c;可以用于实现主视图、侧视图、俯视图、正等轴投影。 1. 主视图投影 主视图投影是指以一个点作为视点&#xff0c;从一个方向观察物体&#x…...

.sh脚本文件的执行方式

方法1&#xff1a; ./xxx.sh方法2&#xff1a; source xxx.sh方法3&#xff1a; bash xxx.sh方法4: sh xxx.sh初识shell&#xff0c;学习并记录...

Android 基础知识4-2.5View与VIewGroup的概念、关系与区别

1.概念&#xff1a; Android里的图形界面都是由View和ViewGroup以及他们的子类构成的&#xff1a; View&#xff1a;所有可视化控件的父类,提供组件描绘和时间处理方法 ViewGroup&#xff1a; View类的子类&#xff0c;可以拥有子控件,可以看作是容器 Android UI中的控件都是…...

【ESP 保姆级教程】玩转巴法云篇① ——初识巴法云

忘记过去,超越自己 ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2023-02-19 ❤️❤️ 本篇更新记录 2023-02-19 ❤️🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言📝🙏 此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...