java框架-Springboot3-基础特性+核心原理

文章目录

  • java框架-Springboot3-基础特性+核心原理
    • profiles
    • 外部化配置
    • 生命周期监听
    • 事件触发时机
    • 事件驱动开发
    • SPI
    • Springboot容器启动过程
    • 自定义starter

java框架-Springboot3-基础特性+核心原理

profiles

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

外部化配置

在这里插入图片描述

生命周期监听

在这里插入图片描述

在这里插入图片描述

事件触发时机

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

事件驱动开发

@Component
public class MyApplicationListener2 {@EventListenerpublic void onApplicationEvent2(MyApplicationEvent event){System.out.println("onApplicationEvent2======================" + event.getSource());}
}
@Component
public class MyApplicationPublish implements ApplicationEventPublisherAware {ApplicationEventPublisher applicationEventPublisher;public String publish(String msg){MyApplicationEvent myApplicationEvent = new MyApplicationEvent(msg);applicationEventPublisher.publishEvent(myApplicationEvent);return msg + "发布成功!";}@Overridepublic void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {this.applicationEventPublisher = applicationEventPublisher;}
}

SPI

当您使用Java SPI机制时,首先需要创建接口、实现类和服务提供者配置文件。以下是一个示例:

  1. 创建服务接口:
// ServiceInterface.java
public interface ServiceInterface {void performAction();
}
  1. 创建服务提供者实现类:
// ServiceProviderImpl1.java
public class ServiceProviderImpl1 implements ServiceInterface {@Overridepublic void performAction() {System.out.println("Performing action from ServiceProviderImpl1");}
}
// ServiceProviderImpl2.java
public class ServiceProviderImpl2 implements ServiceInterface {@Overridepublic void performAction() {System.out.println("Performing action from ServiceProviderImpl2");}
}
  1. 创建服务提供者配置文件:
    src/main/resources/META-INF/services/目录下创建一个名为com.example.ServiceInterface的文件,内容如下:
com.example.ServiceProviderImpl1
com.example.ServiceProviderImpl2
  1. 使用ServiceLoader加载服务:
// MainClass.java
import java.util.ServiceLoader;public class MainClass {public static void main(String[] args) {ServiceLoader<ServiceInterface> serviceLoader = ServiceLoader.load(ServiceInterface.class);for (ServiceInterface service : serviceLoader) {service.performAction();}}
}

以上示例中,通过ServiceLoader.load(ServiceInterface.class)加载实现了ServiceInterface接口的所有服务提供者。通过迭代器遍历,调用performAction()方法执行相应的操作。

请记住,上述代码应该根据您的包名和类名进行调整和修改。运行这段代码时,输出将是:

Performing action from ServiceProviderImpl1
Performing action from ServiceProviderImpl2

这个例子展示了如何使用Java SPI机制来动态地加载和使用服务提供者的实现类。

Springboot容器启动过程

在这里插入图片描述

自定义starter

自定义starter逐级抽取视频讲解
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

认识面向对象-PHP8知识详解

面向对象编程&#xff0c;也叫面向对象程序设计&#xff0c;是在面向过程程序设计的基础上发展而来的&#xff0c;它比面向过程编程具有更强的灵活性和扩展性。 它用类、对象、关系、属性等一系列东西来提高编程的效率&#xff0c;其主要的特性是可封装性、可继承性和多态性。…

Linux 操作技巧

目录 一、shell-命令解释器 二、Linux中的特殊符号 三、命令历史--history 一、shell-命令解释器 shell——壳&#xff0c;命令解释器&#xff0c;负责解析用户输入的命令 ——内置命令&#xff08;shell内置&#xff09; ——外置命令&#xff0c;在文件系统的某个目录下&…

小程序社区团购demo

概述 实现了用户登录或者手机号&#xff0c;加入团长&#xff0c;邀请团长&#xff0c;各种佣金明细等页面 详细 需求&#xff1a; 根据市场信息反馈&#xff0c;社区团购比较火&#xff0c;有流量的用户可以推广页面 实现了功能&#xff1a; 实现了用户微信登录自动获取…

csa从初阶到大牛(练习题2-查询)

新建2个文件d1.txt d2.txt ,使用vim打开d1.txt 输入“Hello World”字符串,将b1.txt 硬链接到b2.txt &#xff0c;查看2个文件的硬连接数 # 新建文件d1.txt和d2.txt touch d1.txt d2.txt# 使用vim编辑d1.txt并输入文本"Hello World" vim d1.txt# 创建硬链接b2.…

速码!!BGP最全学习笔记:IBGP和EBGP基本配置

实验1&#xff1a;配置IBGP和EBGP 实验目的 熟悉IBGP和EBGP的应用场景掌握IBGP和EBGP的配置方法 实验拓扑 想要华为数通配套实验拓扑和配置笔记的朋友们点赞关注&#xff0c;评论区留下邮箱发给你! 实验步骤 1.IP地址的配置 R1的配置 <Huawei>system-view …

25. 图论 - 路径和算法

文章目录 拓展:顶点和边的互换最短路径问题Dijkstra算法Hi, 你好。我是茶桁。 在充分了解图的概念,构成以及种类之后,我们要开始进入稍微有点难度的部分了。这节课,咱们来了解一下路径和Dijkstra算法。 拓展:顶点和边的互换 在这节课正式开始之前,我们对上一节课稍微扩…

若依微服务如何处理Long类型精度丢失问题?

当字段实体类为Long类型且值超过前端js显示的长度范围时会导致前端回显错误。 目录 1、ruoyi-common-security模块添加JacksonConfig配置全局序列化 2、增加指定配置类信息

【深度学习】Pytorch 系列教程(十二):PyTorch数据结构:4、数据集(Dataset)

目录 一、前言 二、实验环境 三、PyTorch数据结构 0、分类 1、张量&#xff08;Tensor&#xff09; 2、张量操作&#xff08;Tensor Operations&#xff09; 3、变量&#xff08;Variable&#xff09; 4、数据集&#xff08;Dataset&#xff09; 随机洗牌 一、前言 Ch…

【计算机网络笔记一】网络体系结构

IP和路由器概念 两台主机如何通信呢&#xff1f; 首先&#xff0c;主机的每个网卡都有一个全球唯一地址&#xff0c;MAC 地址&#xff0c;如 00:10:5A:70:33:61 查看 MAC 地址&#xff1a; windows: ipconfig / alllinux&#xff1a;ifconfig 或者 ip addr 同一个网络的多…

windows安装c环境

一. 下载安装mingw-w64 mingw-w64 解压后放到window环境变量路径 sysdm.cpl参看是否安装成功 二. 安装c idea Dev-Cpp下载及安装 新建文件 运行 编译&#xff08;F9&#xff09;、运行&#xff08;F10&#xff09;以及编译运行&#xff08;F11&#xff09; 参考 安装C…

C++——如何正确的使用STL中的vector?

什么是vector&#xff1f; 在STL&#xff08;标准模板库&#xff09;中&#xff0c;vector是一种动态数组容器&#xff0c;可根据需要自动增长或缩小。它可以存储任意类型的元素&#xff0c;并且支持快速的随机访问。 vector是表示可变大小数组的序列容器vector采用的是连续的…

LeetCode【65. 有效数字】

没有完美的傀儡,没有完美的人类,却有绝美的离逝。 有效数字&#xff08;按顺序&#xff09;可以分成以下几个部分&#xff1a; 一个 小数 或者 整数&#xff08;可选&#xff09;一个 e 或 E &#xff0c;后面跟着一个 整数 小数&#xff08;按顺序&#xff09;可以分成以下几…