Springboot - 3.BeanFactory

✍1. BeanFactory

在Spring Boot中,BeanFactory是Spring Framework的核心接口之一,用于管理和维护应用程序中的Bean实例。它是Spring IoC容器的基础,负责创建、初始化、装配和管理Bean。在Spring Boot中,BeanFactory的实现主要是DefaultListableBeanFactory。以下是结合Spring Boot详细解释BeanFactory的重要概念和用法

🎷1. BeanFactory接口:

BeanFactory接口是Spring IoC容器的根接口,用于从容器中获取Bean。

import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;@Component
public class MyComponent {private final BeanFactory beanFactory;@Autowiredpublic MyComponent(BeanFactory beanFactory) {this.beanFactory = beanFactory;}public void useBean() {MyService myService = beanFactory.getBean(MyService.class);myService.doSomething();}
}

🎷2. 默认实现:

在Spring Boot中,默认的BeanFactory实现是DefaultListableBeanFactory

🎷3. Bean的生命周期:

BeanFactory负责管理Bean的生命周期,如实例化、属性注入和初始化。这个过程会根据配置进行。

🎷4. Bean的获取:

使用getBean()方法从容器中获取Bean。

MyService myService = beanFactory.getBean(MyService.class);

🎷5. 延迟初始化:

默认情况下,BeanFactory支持延迟初始化,只有在需要时才创建Bean实例。

🎷6. 扩展和自定义:

您可以实现BeanPostProcessor接口来自定义Bean的创建和初始化过程。

import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.stereotype.Component;@Component
public class MyBeanPostProcessor implements BeanPostProcessor {// Override methods for customizing bean initialization
}

🎷7. 注解配置:

使用注解定义Bean。

import org.springframework.stereotype.Component;@Component
public class MyService {// Bean implementation
}

🎷8. 注解扫描:

使用注解扫描自动注册标记了@Component的Bean。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;@SpringBootApplication
public class Application {public static void main(String[] args) {ConfigurableApplicationContext context = SpringApplication.run(Application.class, args);MyService myService = context.getBean(MyService.class);myService.doSomething();}
}

🎷9. 自动装配:

使用@Autowired注解进行自动装配。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;@Component
public class MyController {private final MyService myService;@Autowiredpublic MyController(MyService myService) {this.myService = myService;}// Controller logic
}

✍2. 如何使用BeanFactory:

在Spring Boot中,BeanFactory是Spring IoC容器的根接口。它提供了配置框架和基本功能,如获取Bean的实例。

🎷1. 注入BeanFactory:

  • 我们可以通过实现BeanFactoryAware接口或者直接在Bean中注入BeanFactory来使用它。

    @Component
    public class ExampleBean implements BeanFactoryAware {private BeanFactory beanFactory;@Overridepublic void setBeanFactory(BeanFactory beanFactory) throws BeansException {this.beanFactory = beanFactory;}public void doSomething() {// 使用beanFactoryAnotherBean anotherBean = (AnotherBean) beanFactory.getBean(AnotherBean.class);anotherBean.doSomething();}}@Component
    public class AnotherBean {public void doSomething() {System.out.println("AnotherBean doSomething 方法被调用");}}
    

    在这个示例中,ExampleBean实现了BeanFactoryAware接口,这样Spring容器会自动注入BeanFactory。然后,在doSomething方法中,我们使用beanFactory获取AnotherBean的实例,并调用它的doSomething方法。

🎷2. 使用@Autowired注解:

  • 我们可以使用@Autowired注解直接在Bean中注入BeanFactory

    @Component
    public class ExampleBean {@Autowiredprivate BeanFactory beanFactory;public void doSomething() {// 使用beanFactoryAnotherBean anotherBean = (AnotherBean) beanFactory.getBean(AnotherBean.class);anotherBean.doSomething();}}@Component
    public class AnotherBean {public void doSomething() {System.out.println("AnotherBean doSomething 方法被调用");}}
    

    在这个示例中,我们使用@Autowired注解直接在ExampleBean中注入BeanFactory。然后,在doSomething方法中,我们使用beanFactory获取AnotherBean的实例,并调用它的doSomething方法。

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

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

相关文章

Dockerfile 使用教程

1.Dockerfile 1.1 什么是Dockerfile Dockerfile可以认为是 Docker镜像的描述文件,是由一系列命令和参数构成的脚本 。主要作用是 用来构建docker镜像的构建文件 。 通过架构图可以看出通过DockerFile可以直接构建镜像 1.2 Dockerfile解析过程 构建镜像步骤&#xf…

手机怎么剪视频?分享一些剪辑工具和注意事项

视频剪辑是一种将多个视频片段进行剪切、合并和编辑的技术,它可以帮助我们制作出精彩的视频作品。如今,随着智能手机的普及,我们可以随时随地使用手机进行视频剪辑。本文将为大家介绍一些手机剪辑工具和注意事项,帮助大家更好地进…

生成 MySQL 删除索引、创建索引、分析表的 SQL 语句

目录 1. 生成删除索引的 SQL 语句 2. 生成创建索引的 SQL 语句 3. 生成分析表的 SQL 语句 1. 生成删除索引的 SQL 语句 mysql -uwxy -p12345 -S /data/18253/mysqldata/mysql.sock -e " select concat(alter table \,table_schema,\.\,table_name,\ ,drop_index,;)fro…

Java:Springboot和React中枚举值(数据字典)的使用

目录 1、开发中的需求2、实现效果3、后端代码4、前端代码5、接口数据6、完整代码7、参考文章 1、开发中的需求 开发和使用过程中,通常会涉及四个角色:数据库管理员、后端开发人员、前端开发人员、浏览者 数据库使用int类型的数值进行存储(e…

快速为RPG辅助工具MTool增加更多快捷键(一键保存等)

起源:MTool是个好工具,本身固然好用,但是它本身的快捷键功能很少,虽然内置了一个录制工具,但是一个个的录,又麻烦,一般人也难以掌握 本文用快速方法增加更多快捷键,可以做到一键保存…

CCF-CSP 26次 第三题【角色授权】

计算机软件能力认证考试系统 20分&#xff1a; #include<bits/stdc.h> using namespace std; const int N440; int n,m,q,nv,no,nn,ns,ng; struct Node {string name;map<string,int>op;map<string,int>res_kind;map<string,int>res_name; }role[N];…

String、StringBuffer、StringBuilder的区别

String、StringBuffer、StringBuilder的区别 String的内容不可修改&#xff0c;StringBuffer与StringBuilder的内容可以修改.StringBuffer与StringBuilder&#xff08;更快&#xff09;大部分功能是相似的StringBuffer采用同步处理&#xff0c;属于线程安全操作&#xff1b;而S…

基于粒子群算法的考虑需求响应的风-光-柴-储容量优化配置

目录 文章摘要&#xff1a; 研究背景&#xff1a; 考虑柔性负荷的风、光、柴、储微电网模型&#xff1a; 储能配置模型&#xff1a; 粒子群算法&#xff1a; 运行结果&#xff1a; 1. 全年运行效果展示&#xff1a; 2. 典型日运行效果&#xff1a; Matlab代码数据分享…

解决RabbitMQ报错Stats in management UI are disabled on this node

文章目录 问题描述&#xff1a;解决步骤&#xff1a;进入容器后&#xff0c;cd到以下路径修改 management_agent.disable_metrics_collector false退出容器重启rabbitmq容器 问题描述&#xff1a; linux 部署 rabbitmq后&#xff0c;打开rabbitmq管理界面。点击channels&#…

代码随想录打卡—day56—【编辑距离】— 9.2 编辑距离系列

1 583. 两个字符串的删除操作 583. 两个字符串的删除操作 【注意点1】感觉和下面这题很像。就是一模一样&#xff0c;return变一下就是。 1143. 最长公共子序列 【注意点2】注意这题和day55的最后一题的区别&#xff0c;本题求的是最大长度&#xff0c;那题求的是组合方式。…

基于jeecg-boot的flowable流程自定义业务驳回到发起人的一种处理方式

有些粉丝&#xff0c;希望对自定义业务中&#xff0c;驳回到发起人进行处理&#xff0c;比如可以重新进行发起流程&#xff0c;下面就给出一种方式&#xff0c;当然不一定是最好的方式&#xff0c;只是提供一种参考而已&#xff0c;以后可以考虑动态根据流程状态或节点信息进行…

【前端demo】CSS border-radius可视化 原生实现

文章目录 效果原理代码 前端demo系列目录&#xff1a;https://blog.csdn.net/karshey/article/details/132585901 效果 效果预览&#xff1a;https://codepen.io/karshey/pen/zYyBPBR 参考&#xff1a; Fancy Border Radius Generator (9elements.github.io) https://borde…

测试开发【Mock平台】09开发:项目管理(五)搜索、删除和Table优化

【Mock平台】为系列测试开发教程&#xff0c;从0到1编码带你一步步使用Spring Boot 和 Antd React框架完成搭建一个测试工具平台&#xff0c;希望作为一个实战项目对各位的测试开发学习之路有帮助&#xff0c;大奇一个专注测试技术干货原创与分享的家伙。 Mock平台系统项目基本…

【C++】一文解析std::binary_function、std::bind1st、std::bind2nd、std::bind

STL中有一个叫做“适配器”的概念&#xff0c;它指的是某些函数可能定义了两个形参&#xff0c;但是某些算法需要的函数却有时候需要一个形参&#xff0c;那么就需要对其进行适配&#xff0c;将原本只需要两个参数的函数转变成需要1和参数就能正常运行的函数。就像你为你的笔记…

数据集学习笔记(六):目标检测和图像分割标注软件介绍和使用,并转换成YOLO系列可使用的数据集格式

文章目录 一、目标检测1.1 labelImg1.2 介绍1.3 安装1.4 使用1.5 转换1.6 验证 二、图像分割2.1 labelme2.2 介绍2.3 安装2.4 使用2.5 转换2.6 验证 一、目标检测 1.1 labelImg 1.2 介绍 labelImg是一个开源的图像标注工具&#xff0c;用于创建图像标注数据集。它提供了一个…

iOS 设置下载部分文件,如何获取完整文件的大小

在视频的需求中&#xff0c;遇到这样一个需求&#xff0c;播放一视频的时候&#xff0c;要预下载 后面10条视频&#xff0c;但是只下载后面十条视频的前面1M 实现方法 1 创建请求时设置cacheLength resource [[IdiotResource alloc] init];resource.requestURL task.request…

不同路径 II【动态规划】

不同路径 II 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish”&#xff09;。 现在考虑网格中有障碍物。那么从左上…

深入解析即时通讯App开发中的关键技术

即时通讯App开发在现代社交和通信领域中扮演着重要的角色。随着移动设备的普及和网络的高速发展&#xff0c;人们对即时通讯工具的需求不断增加。本篇文章将深入探讨即时通讯App开发中的关键技术&#xff0c;帮助读者了解该领域的最新动态和技术趋势。 基础架构和通信协议 现…

【Python】Python 利用模块实现单例模式

Python 利用模块实现单例模式 在GOF的23种设计模式中&#xff0c;单例是最常使用的模式&#xff0c;通过单例模式可以保证系统中 一个类只有一个实例而且该实例易于被外界访问&#xff0c;从而方便对实例个数的控制并节约系统资 源。每当大家想要实现一个名为XxxMangcr的类时&…

阻塞/非阻塞、同步/异步(网络IO)

1.阻塞/非阻塞、同步/异步(网络IO) 【思考】典型的一次 IO 的两个阶段是什么&#xff1f; 数据就绪 和 数据读写 数据就绪 &#xff1a;根据系统 IO 操作的就绪状态 阻塞 非阻塞 数据读写 &#xff1a;根据应用程序和内核的交互方式 同步 异步 陈硕&#xff1a;在处理 IO …