Java框架之springboot基础

news2024/11/16 22:46:52

写在前面

本文看下springboot相关的基础内容。

1:从spring到springboot

在工作中,如果是我们想要引入某个框架,比如引入springMVC,就需要在web.xml中配置DispatcherServlet,在springmvc的配置文件中配置视图解析器等,同理,对于其他框架也都要进行响应的配置,但其实,整个配置的过程其实就是在spring IOC容器中创建框架需要的spring bean,像下图:

在这里插入图片描述

其实,我们要使用的各种功能对应的配置,在不通的项目中配置几乎都是相同的过程,而不同的是什么呢?基本上就是ip地址,端口号,用户名,密码这些,所以真正需要开发人员做的其实就是提供这些不确定的内容就行了,确定的配置过程,让程序来做就好,而springboot就是来做这个事情的,引入了springboot上面的过程可能变为下图:

在这里插入图片描述

所以,springboot的目标就是让开发变得简单,让配置变得简单,让运行变得简单。

2:springboot的使用

我们有两种方式来创建一个最简单的springboot项目,第一种是使用spring官方提供的脚手架 ,也可以使用idea内置的创建springboot项目的功能(内部也是调用https://start.spring.io),我们以idea为例看下,首先,new-project选择Spring Initializer,如下图:

在这里插入图片描述
之后next,录入gav,jdk版本等信息:

在这里插入图片描述
再next,这一步选择我们想要使用的功能,需要什么就选择什么就行了,比如这里选择了spring-messaging中的spring for rabbitmq,就代表我们需要使用rabbitmq,如下图:

在这里插入图片描述
接着,next,finishi,就OK了,如下图:

在这里插入图片描述

之后我们就可以通过Main函数来启动我们的springboot应用了。

3:springboot的原理

在springboot应用的main函数中都会写一个注解@SpringBootApplication,这是一个组合注解,组合了@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan等注解,其中的@EnableAutoConfiguration最为重要,当解析到该注解后,就会解析classpath下所有的META-INF/spring.factories文件中的自动配置类,其中自动配置类的key是EnableAutoConfiguration类的全限定名称,如下,springboot官方提供的100多个自动配置类:

在这里插入图片描述

之后,就会自动加载这些通过javaconfig方式配置的信息,但并不是无脑加载,只有在满足条件注解的才会加载,对应的注解是@ConditionOnXxxx,如@ConditionOnBean就是当spring IOC容器中存在的某个bean时才加载,完整的如下:

在这里插入图片描述

接着就可以加载@Bean注解的方法来生成生成spring bean了,但是此时还有一个问题,不同的环境使用的配置是不同的,如数据库的地址,端口,用户名密码等信息不同,springboot是这样做的,约定了会读取spring.profile.active的值,以此来确定读取哪套配置文件,而默认加载的配置文件是application.yml/application.properties,还会加上带有环境信息的配置文件application_{spring.profile.active}.yml/application_{spring.profile.active}.properties,到这里,为了方便获取配置的信息,springboot定义了@ConfigurationProperties,用子一个类上,其中指定了preffix属性用来设置读取哪些值设置的类的属性上,如下:

@ConfigurationProperties(
    prefix = "spring.rabbitmq"
)
public class RabbitProperties {
    private static final int DEFAULT_PORT = 5672;
    private static final int DEFAULT_PORT_SECURE = 5671;
    private String host = "localhost";
    private Integer port;
    private String username = "guest";
    private String password = "guest";
}

就会读取以spring.rabbitmq为前缀并拼接上属性名称,从配置文件中获取值,如配置文件中配置了spring.rabbitmq.host=192.168.9.87,则最终创建的RabbitProperties的实例,host值就是192.168.9.87,接着我们只需要将配置类对应的spring bean注入到自动配置类中,自动配置类就能动态的使用用户提供的配置文件来创建功能需要的spring bean了,如下实例:

@Configuration(proxyBeanMethods = false) // java config
@ConditionalOnClass({ RabbitTemplate.class, Channel.class }) // 条件注解
@EnableConfigurationProperties(RabbitProperties.class) // 启动自动配置类,这样会自动将该bean作为参数传递到方法中(这是我猜测的,不一定对!)
@Import(RabbitAnnotationDrivenConfiguration.class) // 引入其它javaconfig类
public class RabbitAutoConfiguration {

	@Configuration(proxyBeanMethods = false)
	@ConditionalOnMissingBean(ConnectionFactory.class)
	protected static class RabbitConnectionFactoryCreator {

    @Bean
    public CachingConnectionFactory rabbitConnectionFactory(RabbitProperties properties /* 封装了配置文件内容的对象 */,
            ResourceLoader resourceLoader, ...) throws Exception {}

这样子,springboot的自动配置就完成了!

写在后面

参考文章列表

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

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

相关文章

App自动化测试|Appium+Python自动化测试环境搭建

windows下搭建pythonappium环境 搭建过程步骤如下: 安装jdk并配置好环境变量(jdk版本1.8以上)安装android-sdk并配置好环境变量;具体步骤见:Android Studio安装(推荐使用这种方法安装SDK) - 环境配置 - 测试人社区安…

ASEMI代理海矽美SFP3012, 快恢复二极管SFP3012参数

编辑-Z SFP3012参数描述: 型号:SFP3012 最大反向重复峰值电压VRRM:1200V 平均整流正向电流IF:30A 反向恢复时间TRR:≤65nS 正向峰值浪涌电流IFSM:1602A 工作接点温度TJ:-40~1…

【数据挖掘】时间序列教程【七】

4.3 分布式滞后模型 考虑响应时间序列 y t 和输入(或“曝光”)时间序列 X t 。可能还有其他值得考虑的协变量,我们暂时忽略它们并在下一节中讨论它们的包含情况。我们将考虑以下形式的模型 在哪里 ε 表示独立同分布噪声过程。在连续时间设置中,该模型可以写为: …

VS上配置docker步骤记录

1:VS里安装Remote Development 2:运行 sudo usermod -aG docker $USER。#将当前用户添加到docker用户组中 sudo newgrp docker#更新,运行这个切到了root用户,获取权限 docker ps #列出正在运行的容器。它会显示容器的相关信息,如容器ID、镜像名称、创建时间、状态…

Linux 用户名称高亮和最近路径显示

1、通常情况下,Linux中的路径名称会不断叠加显示,如下图,这样看起来会很长。 2、为了设置路径只是当前最近的文件路径,先进入自己的家目录,然后进入.bashrc: 3、在.bashrc文件中的最后一行加入以下内容…

C# int[,] 和 int[,,]

如标题; 在C#中这两个是定义二维和三维数组的;这和C语言的写法不同; C语言定义二维数组是, int a[5][3]; 看下C#的多维数组;输出数组其中一个值; using System;class Program {static void Main(string[…

STM32 Proteus UCOSII系统拔河小游戏LED模拟-0053

STM32 Proteus UCOSII系统拔河小游戏LED模拟-0053 Proteus仿真小实验: STM32 Proteus UCOSII系统拔河小游戏LED模拟-0053 功能: 硬件组成:STM32F103R6单片机 1个选手1按键1个选手2按键1个重新开始按键7个LED灯1个蜂鸣器 1.单片机程序使用…

迷迷糊糊?似懂非懂?一文让你从此对SPI了如指掌

迷迷糊糊?似懂非懂?一文让你从此对SPI了如指掌 前言一、SPI 与 API1. SPI 在生活中的类比2. SPI 在代码上的例子3. API 与 SPI 的关系 二、JAVA 的 SPI 机制1. JAVA 中的 SPI 例子2. SPI 机制的四大组件3. SPI 机制的实现4. JAVA SPI的不足 前言 你是不…

CICD集合(四):Jenkins配置JDK,Maven,Allure报告

在Jenkins上面配置Jdk以及Maven环境 Maven和JDK Allure报告配置 当然配置Allure,得先安装Allure插件:

【Java项目】SpringBoot项目如何从自研配置中心拉取配置

文章目录 前言思路 前言 先简单说一下这个题目的意思是什么。 我们知道,如果我们的项目是SpringCloud的项目,我们是可以把我们的本地配置写到云端的的配置中心的,比如集成SpringCloud Alibaba,你就可以使用Nacos,然后…

科技云报道:智能化潮起,物联网产业链安全和效率问题何解?

科技云报道原创。 黑灯瞎火的夜。一胖一瘦两个小伙分别拿着平板和手机,在某知名新能源汽车周围鬼鬼祟祟地打转。 不到一分钟的时间,其中的瘦小伙很轻易地就用手机解开了车门锁。另外一名胖小伙,却用了两分钟,花了老大的力气&…

网站建设如何快速建站_网站建设快速建站有哪些方法

网站建设快速建站方法 1、JavaScript 压缩和模块打包 JavaScript 应用是以源码形式进行分发的,而源码解析的效率是要比字节码低的。对于一小段脚本来说,区别可以忽略不计。但是对于更大型的应用,脚本的大小会对应用启动时间有着负面的影响。…

dubbo Sentinet 限流 流控配置 高级 直连 关联 链路 预热冷启动 排队等待 单机 qps 并发 机器总体法制 单机均摊 集群俩种身份

目录 进入配置 单机超过10个限流 Qps 和 并发线程数区别使用思路 集群阈值模式 单机均摊 总体阈值 集群流控中共有两种身份: 高级-流控模式 直连 关联 链路 首先在实现类上加注解 Warm Up 预热冷启动 10秒内完成 100 预热并发效果 效果 排队等待 单…

Linux11.进程等待

1.写时拷贝 :使用fork创建子进程的时候,操作系统使用写时拷贝,类似于浅拷贝和深拷贝,对于只读的数据进行浅拷贝,对于需要写入的数据进行深拷贝。 2.cpu中有一个EIP寄存器,也叫pc指针(程序计数器),永远指向…

【ARM】-数据访问中止异常中断处理程序的返回

文章目录 处理流程示例 处理流程 当发生数据访问中止异常中断时,程序要返回到该有问题的数据指令处,重新访问该数据。因此数据访问中止异常中断程序应该返回到该数据访问中止异常中断的指令处,而不是像前面两种情况下返回到发生中断的指令的…

SpringBoot实战项目整合RabbitMQ+ElaticSearch实现SKU上下架功能

文章目录 前言1、前置条件2、搭建service-search模块3、开发功能接口3.1 添加远程调用方法3.2、创建远程调用模块3.3、开发service-search 模块接口 4、RabbitMQ5、完善SKU管理商品上下架5.1、商品服务5.2、es服务 6、最终测试总结 前言 最终实现效果:针对SKU的上下…

Java基础---String、StringBuilder和StringBuffer的区别

目录 典型回答 String的""是如何实现的 StringBuffer和StringBuilder 不要在for循环中使用拼接字符串 典型回答 本质上都是char[]字符数组的实现在Java9之后,String类的实现改用byte数组存储字符串使用final关键字修饰字符数组来保存字符串&#xff0…

基于VUE3+Layui从头搭建通用后台管理系统(前端篇)四:用户注册界面及对应功能实现

一、本章内容 本章实现用户注册功能,包括短信注册界面、邮箱注册界面、短信注册修改接口、邮箱注册修改接口等相关内容,实现用户注册的完整流程。 1. 详细课程地址: 待发布 2. 源码下载地址: 待发布 二、界面预览 三、开发视频 基于VUE3+Layui从头搭建通用后台管理系统合…

打造 API 接口的堡垒

前言 伴随互联网革命快速创新发展,API 需求的日益剧增,针对 API 的攻击几乎遍布各个行业,据报道 2022 年全年平均每月遭受攻击的 API 数量超过 21 万,游戏、社交、电商、制造等行业依然是攻击者主要目标。例如社交软件某特&#…

cuda优化

希望用GPU解决更大的问题,更多的程序在同等的设备商运行 最大化单个kernel的运算强度, 最小化内存的操作时间 在第一步分析的时候,不要依赖直觉 类似CPU,单个线程处理这个事情,串行 把读取全局内存的地方合并以后…