SprngBoot配置文件、启动流程、Bean对象,ApplicationContext

目录

一、SpringBoot配置文件加载的优先级

二、SpringBoot的启动流程大概是什么?

三、怎么在SpringBoot启动后执行方法?

四、Spring怎么装载自定义的Bean?

五、Spring怎么控制Bean对象要不要加载?

六、Spring中FactoryBean和BeanFactory有什么关系?

七、Spring中注入ApplicationContext能干什么?


一、SpringBoot配置文件加载的优先级

  1. 命令行参数具有最高的优先级,可以在应用启动时覆盖其他配置,--server.port=8080
  2. Java系统属性:程序内部通过System.setProperty()方法设置。
  3. 应用外部的带Profile的配置文件:(其中{profile}是激活的Profile名称),它们会在对应的Profile被激活时加载。
  4. 应用外部的不带Profile的配置文件
  5. 应用内部的带Profile的配置文件
  6. 应用内部的不带Profile的配置文件
  7. @Configuration注解类上的@PropertySource
  8. Spring Boot的特定加载顺序,bootstrap,application.yml
  9. 文件类型:在同一路径下,.properties文件的优先级高于.yml或.yaml文件。

二、SpringBoot的启动流程大概是什么?

        先会执行main中的run()方法,run方法中会有类似于spring的IOC初始化的操作,而IOC实际上就是利用了典型的模板方法模式,实际上调用了刷新的13个模板方法,而springboot在初始化的过程中,很明显,不会进行配置文件的初始化,而是注解初始化,此时会将当前java配置类的类对象传递进去,然后接下来就是使用自动装配的注解,这个注解会去加载spring.factories文件中的内容去进行候选,同时会通过spring-autoconfiguration-metadata.properties去进行筛选,剩下的会在返回的时候加入IOC容器中

三、怎么在SpringBoot启动后执行方法?

        1、使用@PostConstruct注解

@Component  
public class MyStartupRunner {  
  
    @PostConstruct  
    public void init() {  
        // 在这里执行你的初始化代码  
        System.out.println("使用@PostConstruct注解执行初始化");  
    }  
}

        2、实现CommandLineRunner或ApplicationRunner接口

四、Spring怎么装载自定义的Bean?

  1. 使用XML配置文件:在XML文件中定义Bean,然后在Spring Boot的主类中通过@ImportResource注解引入这些XML配置。
  2. 使用Java配置类:在Spring Boot中,更推荐使用Java配置类来定义Bean。你可以创建一个带有@Configuration注解的类,并在其中使用@Bean注解来定义Bean。
  3. 使用组件扫描:Spring Boot的默认行为是开启组件扫描的,它会扫描@SpringBootApplication注解所在的包及其子包下的类,并自动注册带有@Component、@Service、@Repository、@Controller等注解的类为Bean

五、Spring怎么控制Bean对象要不要加载?

        1、使用@Conditional注解

        使用@ConditionalOnClass来检查类路径下是否存在某个类,如果存在则加载Bean;

        使用@ConditionalOnMissingBean来检查容器中是否已存在某个Bean,如果不存在则加载Bean

        使用@ConditionalOnProperty来根据配置属性决定是否加载Bean

        2、ImportSelector接口

通过@Import注解引入一个选择器类,该选择器类可以实现根据特定条件来动态地选择一组Bean类名进行加载。这种方式在需要根据不同条件加载不同Bean集合时非常有用

        3、Profile

        @Profile注解本身不直接用于条件控制Bean的加载,但它允许开发者根据不同的环境(如开发、测试、生产)来激活或禁用一组Bean

六、Spring中FactoryBean和BeanFactory有什么关系?

        beanFactory 是所有 spring bean容器的顶级接口,为spring的容器定义了一套规范,并提供了像getbean这样的方法 从容器中获取指定的bean实例

        beanFactory在产生bean的同时,还提供了DI,用来解决bean之间依赖注入的能力

        FactroyBean 是一个工厂bean,是一个接口,动态去生成某一类型的bean的实例,可以自定义一个bean 去加载到IOC容器里面

七、Spring中注入ApplicationContext能干什么?

  1. 获取Bean:虽然直接注入所需的Bean是更常见的做法,但在某些情况下,你可能需要在运行时根据条件或配置动态地获取Bean。ApplicationContext允许你通过getBean(String name)getBean(Class<T> requiredType)方法获取Bean实例。

  2. 访问环境信息和配置文件ApplicationContext提供了对Spring环境(Environment)的访问,这使得你可以读取外部化配置(如属性文件、YAML文件或环境变量)中的值。这对于配置驱动的应用程序特别有用,因为它允许你根据环境(开发、测试、生产)或特定条件动态地调整应用程序的行为。

  3. 发布和监听事件ApplicationContext实现了ApplicationEventPublisher接口,允许你发布应用程序事件。这对于跨组件通信非常有用,特别是当你不希望组件之间有直接依赖时。同时,你可以通过实现ApplicationListener接口来监听这些事件,从而在事件发生时执行特定的逻辑。

  4. 加载资源ApplicationContext提供了对资源的访问,如文件、类路径资源等。这对于加载配置文件、图片或其他类型的资源特别有用。

  5. 支持AOP(面向切面编程):虽然AOP不是直接通过ApplicationContext实现的,但ApplicationContext是Spring AOP集成的基础。通过ApplicationContext,你可以轻松地注册和使用AOP切面,以实现对横切关注点(如日志、事务管理等)的模块化。

  6. 获取国际化消息ApplicationContext支持国际化,允许你根据用户的语言偏好返回不同语言的消息。这对于开发多语言应用程序非常有用。

  7. 集成Spring的其他模块:Spring提供了许多扩展模块,如Spring MVC、Spring Security等,它们都与ApplicationContext紧密集成。通过ApplicationContext,你可以轻松地集成这些模块,并利用它们提供的功能。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大学教师门诊预约小程序-计算机毕业设计源码73068

摘要 在当今数字化、信息化的浪潮中&#xff0c;大学校园的服务管理正朝着智能化、便捷化的方向迈进。为了优化大学教师的医疗体验&#xff0c;提升门诊预约的效率和便捷性&#xff0c;我们基于Spring Boot框架设计并实现了一款大学教师门诊预约小程序。该小程序不仅提供了传统…

你的 Mac 废纸篓都生苍蝇啦

今天给大家推荐个免费且有趣的小工具 BananaBin&#xff0c;它可以在你的废纸篓上“长”一些可爱的苍蝇&#x1fab0;。 软件介绍 BananaBin 是 macOS 上的一款有趣实用工具&#xff0c;当你的垃圾桶满了时&#xff0c;它会提醒你清理。这个软件通过在垃圾桶上添加互动的苍蝇…

亲子时光里的打脸高手,贾乃亮与甜馨的父爱如山

贾乃亮这波操作&#xff0c;简直是“实力打脸”界的MVP啊&#xff01; 7月5号&#xff0c;他一甩手&#xff0c;甩出张合照&#xff0c; 瞬间让多少猜测纷飞的小伙伴直呼&#xff1a;“脸疼不&#xff1f;”带着咱家小甜心甜馨&#xff0c; 回了哈尔滨老家&#xff0c;这趟亲…

AI革命:RAG技术引领未来智能

AI革命:RAG技术引领未来智能 在人工智能的浪潮中,一种名为RAG(Retrieval-Augmented Generation)的技术正在悄然改变我们的世界。这种技术通过整合外部知识库,极大地增强了大型语言模型(LLM)的性能,为智能助手、聊天机器人等应用带来了革命性的提升。 1 突破性的RAG技…

停车场小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;车主管理&#xff0c;商家管理&#xff0c;停车场信息管理&#xff0c;预约停车管理&#xff0c;商场收费管理&#xff0c;留言板管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;停车场信息…

Java——IO流(二)-(4/7):不同编码读取乱码的问题,转换流-InputStreamReader、OutputStreamWriter

目录 不同编码读取出现乱码的问题 转换流 InputStreamReader(字符输入转换流) 实例演示(1) OutputStreamWriter(字符输出转换流) 实例演示(2) 不同编码读取出现乱码的问题 如果代码编码和被读取的文本文件的编码是一致的&#xff0c;使用字符流读取文本文件时不会出现乱…

ctfshow web入门 nodejs

web334 有个文件下载之后改后缀为zip加压就可以得到两个文件 一个文件类似于index.php 还有一个就是登录密码登录成功就有flag username:ctfshow password:123456因为 return name!CTFSHOW && item.username name.toUpperCase() && item.password passwor…

8分钟带你快速了解Connector/Catalog API的核心设计

引言 在现代大数据应用中&#xff0c;数据集成和同步成为企业数据管理的关键环节。随着数据源和数据库的多样化&#xff0c;如何高效地进行数据集成成为企业面临的重要挑战。 Apache SeaTunnel 作为一款开源的数据集成工具&#xff0c;致力于解决这一问题。本文将详细介绍 Sea…

Drools开源业务规则引擎(一)- 安装与介绍

文章目录 [toc] Drools开源业务规则引擎&#xff08;一&#xff09;- 安装与介绍0.何为规则引擎1.Drools介绍1.1.依赖模块1.2.规则引擎 2.Drools安装2.1.依赖导入2.2.规则的输入和输出类型输入类型输出类型 2.3.创建规则文件2.4.构建可执行规则库2.5.执行结果&#xff1a; 3.Dr…

Oracle Database 23ai新特性:增加聚合函数对INTERVAL数据类型支持

在Oracle早期的版本&#xff0c;聚合函数和分析函数MIN/MAX 就支持了INTERVAL 数据类型。但是&#xff0c;当我们使用SUM或AVG函数对INTERVAL 数据类型进行运算时&#xff0c;就会报错。 随着Oracle Database 23ai 的发布&#xff0c;增加了 AVG 以及 SUM 函数对INTERVAL 数据…

Keepalived+LVS实现负责均衡,高可用的集群

Keepalived的设计目标是构建高可用的LVS负载均衡群集&#xff0c;可以调用ipvsadm工具来创建虚拟服务器&#xff0c;管理服务器池&#xff0c;而不仅仅用作双机热备。使用Keepalived构建LVS群集更加简便易用&#xff0c;主要优势体现在&#xff1a;对LVS负责调度器实现热备切换…

七、MyBatis-Plus高级用法:最优化持久层开发-个人版

七、MyBatis-Plus高级用法&#xff1a;最优化持久层开发 目录 文章目录 七、MyBatis-Plus高级用法&#xff1a;最优化持久层开发目录 一、MyBatis-Plus快速入门1.1 简介1.2 快速入门回顾复习 二、MyBatis-Plus核心功能2.1 基于Mapper接口CRUDInsert方法Delete方法Update方法Se…

实战某大型连锁企业域渗透

点击星标&#xff0c;即时接收最新推文 本文选自《内网安全攻防&#xff1a;红队之路》 扫描二维码五折购书 实战域渗透测试流程 对黑客来说&#xff0c;拿下域控制器是终极目标。然而攻击者空间是如何通过采取信息收集、权限提升、横向移动等一系列手段&#xff0c;从而一步步…

Maven基本使用

1. Maven前瞻 Maven官网&#xff1a;https://maven.apache.org/ Maven镜像&#xff1a;https://mvnrepository.com 1.1、Maven是什么 Maven是一个功能强大的项目管理和构建工具&#xff0c;可以帮助开发人员简化Java项目的构建过程。 在Maven中&#xff0c;使用一个名为 pom.…

Nginx-http_auth_basic_module使用

文章目录 前言一、ngx_http_auth_basic_module二、指令1.auth_basic1.auth_basic_user_file 示例生成密码文件配置basic认证浏览器验证 总结 前言 nginx可以通过HTTP Basic Authutication协议进行用户名和密码的认证。 一、ngx_http_auth_basic_module 生效阶段&#xff1a; …

Apache DolphinScheduler 与 AWS 的 EMR/Redshift 集成实践分享

引言 这篇文章将给大家讲解关于DolphinScheduler与AWS的EMR和Redshift的集成实践&#xff0c;通过本文希望大家能更深入地了解AWS智能湖仓架构&#xff0c;以及DolphinScheduler在实际应用中的重要性。 AWS智能湖仓架构 首先&#xff0c;我们来看一下AWS经典的智能湖仓架构图…

软件运维服务方案(Word原件2024)

软件运维服务方案&#xff08;Word原件&#xff09; 1. 服务简述 我们提供全面的软件运维服务&#xff0c;确保软件系统的稳定运行。 1.1 服务内容 包括监控、维护、故障排查与优化。 1.2 服务方式 结合远程与现场服务&#xff0c;灵活响应客户需求。 1.3 服务要求 高效响应&am…

计算机应用数学--第三次作业

第三次作业计算题编程题1 基于降维的机器学习2 深度学习训练方法总结 第三次作业 计算题 (15 分&#xff09;对于给定矩阵 A A A&#xff08;规模为 42&#xff09;&#xff0c;求 A A A 的 SVD&#xff08;奇异值分解&#xff09;&#xff0c;即求 U U U&#xff0c; Σ …

Spring 6.1.10版本源码编译

每篇一句 我们对时间的感知其实非常主观&#xff0c;我们越习惯于我们的生活方式&#xff0c;生活里面的新鲜感就越少&#xff0c;我们对时间 的感知就越快&#xff0c;生命就越短。 1.源码下载 进入Spring官网 https://spring.io/ 按照上图步骤进入如下Spring Framework链…

数据结构--单链表实现

欢迎光顾我的homepage 前言 链表和顺序表都是线性表的一种&#xff0c;但是顺序表在物理结构和逻辑结构上都是连续的&#xff0c;但链表在逻辑结构上是连续的&#xff0c;而在物理结构上不一定连续&#xff1b;来看以下图片来认识链表与顺序表的差别 这里以动态顺序表…