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

SpringBoot的开篇 特点 初始化 ioc 配置文件

文章目录

      • 前言
        • SpringBoot发展历程
        • SpringBoot前置准备
        • SpringBoot特点
      • SpringBoot项目初始化
      • 项目启动
      • Springboot的核心概念IOC
        • 概念介绍
        • Bean对象
        • 通过注解扫描包
      • 例子
      • 配置文件

前言

SpringBoot发展历程

最初,Spring框架的使用需要大量的XML配置,这使得开发过程复杂且难以维护。开发者需要通过XML文件来定义应用的各个组件和它们之间的关系。

随着Spring 4.x的发布,框架逐渐引入了基于注解的配置方式。开发者可以通过Java类中的注解来代替XML配置,从而简化了配置过程。这一变化使得开发者能够更直观地理解应用的结构,并减少了配置文件的数量

为了解决传统Spring开发中的复杂性,Pivotal团队在2014年推出了Spring Boot。Spring Boot旨在简化基于Spring的应用开发,使得开发者可以更快速地构建和部署应用。它提供了约定优于配置的原则,减少了繁琐的配置步骤,同时集成了微服务架构的理念。

SpringBoot前置准备

Java语言基础,IDEA编辑器、
Spring Boot 2.x版本支持JDK 8及以上版本
Spring Boot 3.x版本要求使用JDK 17或更高版本

SpringBoot特点

SpringBoot官网有具体介绍

  1. 创建独立的 Spring 应用程序
  2. 直接嵌入 Tomcat、Jetty 或 Undertow(无需部署 WAR 文)
  3. 提供丰富的 “starter” 依赖项以简化您的构建配置
  4. 尽可能自动配置 Spring 和第三方库
  5. 提供生产就绪型功能,例如指标、运行状况检查和外部化配置
  6. 不会生成额外检查,也不需要 XML 配置

SpringBoot项目初始化

IDEA编辑器创建项目,默认从 https://start.spring.io/上拉取代码,可能会失败,所以更换成阿里代理
请添加图片描述

项目启动

找到主类,点击绿色按钮启动
请添加图片描述
启动日志内容解析,这些日志信息记录了Spring Boot应用从启动到Tomcat和Spring上下文初始化的整个过程。

2024-10-27 20:56:54.037  INFO 54700 --- [           main] com.example.demo.Demo1Application        : Starting Demo1Application using Java 11.0.13 on bogon with PID 54700 (/Users/one/Downloads/java后端学习/demo1/target/classes started by one in /Users/one/Downloads/java后端学习/demo1)
//- 应用程序 `Demo1Application` 正在启动,使用 Java 11.0.13,进程ID为54700。
2024-10-27 20:56:54.045  INFO 54700 --- [           main] com.example.demo.Demo1Application        : No active profile set, falling back to 1 default profile: "default"
//- 没有设置活动的配置文件,使用默认配置文件。
2024-10-27 20:56:56.032  INFO 54700 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)// 内嵌的Tomcat服务器在8080端口初始化。
-2024-10-27 20:56:56.056  INFO 54700 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]//- 开始启动Tomcat服务。
2024-10-27 20:56:56.056  INFO 54700 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.68]
//- 启动Servlet引擎,使用的是Apache Tomcat 9.0.68。
2024-10-27 20:56:56.272  INFO 54700 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
//始化Spring的Web应用上下文。
2024-10-27 20:56:56.272  INFO 54700 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2092 ms
// 根Web应用上下文的初始化完成,耗时2092毫秒。
2024-10-27 20:56:56.936  INFO 54700 --- [           main] o.s.b.a.w.s.WelcomePageHandlerMapping    : Adding welcome page: class path resource [static/index.html]
//- 添加欢迎页面,通常是`static/index.html`。
2024-10-27 20:56:57.159  INFO 54700 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
//- Tomcat在8080端口成功启动,应用的上下文路径为空。
2024-10-27 20:56:57.178  INFO 54700 --- [           main]
com.example.demo.Demo1Application        : Started Demo1Application in 4.643 seconds (JVM running for 6.993)
//- 应用`Demo1Application`启动完成,总耗时4.643秒。
2024-10-27 20:57:19.742  INFO 54700 --- [nio-8080-exec-2] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
// 开始初始化Spring的`DispatcherServlet`。
2024-10-27 20:57:19.744  INFO 54700 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
//`DispatcherServlet`的初始化开始
2024-10-27 20:57:19.758  INFO 54700 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet        : Completed initialization in 14 ms
//- `DispatcherServlet`的初始化完成,耗时14毫秒。

Springboot的核心概念IOC

概念介绍

IoC(Inversion of Control,控制反转)是一种对象管理技术,通常被称为IoC容器。它是一项管理对象生成、获取和管理的技术,Java作为一门面向对象的语言,对象的管理就至关重要。在传统的Java编程中,对象一般通过new构建,不方便管理,而Springboot通过注解来构建对象。

Bean对象

Bean是由Spring IoC容器实例化、组装和管理的对象。容器负责其生命周期,包括创建、初始化和销毁。
Bean的定义可以通过XML配置、Java注解或Java配置类来实现,提供了多种灵活的配置方式。
Spring支持依赖注入(DI),可以在Bean中自动注入其依赖的其他Bean,从而降低了对象之间的耦合度。

通过注解扫描包

在主类上添加@ComponentScan包扫描注解,注意:该注解会扫描述的类所在包和其子包的注解springboot的主类SpringBootApplication集成了这个包

例子

首先,使用@Configuration注解定义一个配置类,并通过@Bean注解创建Bean。

@Configuration  
public class AppConfig {  @Bean  public UserService userService() {  return new UserService();  }  @Bean  public UserRepository userRepository() {  return new UserRepository();  }  
}

接下来,在需要使用这些Bean的地方,通过@Autowired注解进行依赖注入

@Service  
public class UserService {  private final UserRepository userRepository;  @Autowired  public UserService(UserRepository userRepository) {  this.userRepository = userRepository;  }  public void performAction() {  // 使用 userRepository    }  
}

配置文件

配置文件是管理应用设置的重要部分。通常使用application.propertiesapplication.yml来定义各种配置项,配置项都是做了默认配置的比如端口号,日志。

application.yml

# 设置端口号
server:port: 9999

application.properties

# 设置端口号
server.port=8081

文章到这里就结束了,希望对你有所帮助

相关文章:

SpringBoot的开篇 特点 初始化 ioc 配置文件

文章目录 前言SpringBoot发展历程SpringBoot前置准备SpringBoot特点 SpringBoot项目初始化项目启动Springboot的核心概念IOC概念介绍Bean对象通过注解扫描包 例子配置文件 前言 SpringBoot发展历程 最初,Spring框架的使用需要大量的XML配置,这使得开发…...

docker 可用镜像服务地址(2024.10.25亲测可用)

1.错误 Error response from daemon: Get “https://registry-1.docker.io/v2/” 原因:镜像服务器地址不可用。 2.可用地址 编辑daemon.json: vi /etc/docker/daemon.json内容修改如下: {"registry-mirrors": ["https://…...

【SQL实验】表的更新和简单查询

完整代码在文章末尾 在上次实验创建的educ数据库基础上,用SQL语句为student表、course表和sc表中添加以下记录 【SQL实验】数据库、表、模式的SQL语句操作_创建一个名为educ数据库,要求如下: (下面三个表中属性的数据类型需要自己设计合适-CSDN博客在这篇博文中已经…...

【C++】 string的了解及使用

标准库中的string类 在使用string类时&#xff0c;必须包含#include头文件以及using namespace std; string类的常用接口说明 C中string为我们提供了丰富的接口来供我们使用 – string接口文档 这里我们只介绍一些常见的接口 string类对象的常见构造 #include <iostrea…...

【K8S】kubernetes-dashboard.yaml

https://raw.githubusercontent.com/kubernetes/dashboard/v3.0.0-alpha0/charts/kubernetes-dashboard.yaml 以下链接的内容&#xff1a; 由于国内访问不了&#xff0c;找到一些方法下载了这个文件内容&#xff0c; 部署是mages 对象的镜像 WEB docker.io/kubernetesui/dash…...

远程root用户访问服务器中的MySQL8

一、Ubuntu下的MySQL8安装 在Ubuntu系统中安装MySQL 8.0可以通过以下步骤进行1. 更新包管理工具的仓库列表&#xff1a; sudo apt update 2. 安装MySQL 8.0&#xff0c;root用户默认没有密码&#xff1a; sudo apt install mysql-server sudo apt install mysql-client 【…...

解释一下 Java 中的静态变量(Static Variable)和静态方法(Static Method)?

今天来和大家深入探讨一下 Java 中的静态变量和静态方法&#xff0c;并通过一些具体的例子来理解它们在实际开发中的应用。 静态变量&#xff08;Static Variable&#xff09; 静态变量&#xff0c;也称为类变量&#xff0c;是在类的层次上共享的变量。这意味着无论创建了多少…...

【Linux】————磁盘与文件系统

作者主页&#xff1a; 作者主页 本篇博客专栏&#xff1a;Linux 创作时间 &#xff1a;2024年10月17日 一、磁盘的物理结构 磁盘的物理结构如图所示&#xff1a; 其中具体的物理存储结构如下&#xff1a; 磁盘中存储的基本单位为扇区&#xff0c;一个扇区的大小一般为512字…...

平衡控制——直立环——速度环

目录 平衡控制原理 平衡控制模型 平衡控制中基于模型设计与自动代码生成技术 速度环应用原理 速度控制模型 平衡控制原理 下图是一个单摆模型&#xff0c;对其进行受力分析如图。 在重力作用下,单摆受到和角度成正比,运动方向相反的回复力。而且在空气中运动的单摆,由于受…...

面试简要介绍hashMap

jdk8之前&#xff0c;hashmap采用的数据结构是数组链表&#xff0c;jdk8之后采用的数据结构是数组链表/红黑树。hashmap的数据以键值对的形式存在&#xff0c;如果两个元素的hash值相同&#xff0c;就会发生hash冲突&#xff0c;被放到同一个链表上--->如何解决hash冲突---&…...

HTTPS如何实现加密以及SSL/TSL加密的详细过程

通过将服务器从 HTTP 提升到 HTTPS 加密&#xff0c;数据在客户端和服务器之间的传输过程中的确得到了安全保护。以下是这种实现加密的机制以及客户端需要做的事情的详细说明。 为什么这样就实现了加密 SSL/TLS 协议&#xff1a; HTTPS 使用 SSL&#xff08;安全套接层&#x…...

Golang | Leetcode Golang题解之第516题最长回文子序列

题目&#xff1a; 题解&#xff1a; func longestPalindromeSubseq(s string) int {n : len(s)dp : make([][]int, n)for i : range dp {dp[i] make([]int, n)}for i : n - 1; i > 0; i-- {dp[i][i] 1for j : i 1; j < n; j {if s[i] s[j] {dp[i][j] dp[i1][j-1] …...

(done) 什么 RPC 协议? remote procedure call 远程调用协议

来源&#xff1a;https://www.bilibili.com/video/BV1Qv4y127B4/?spm_id_from333.337.search-card.all.click&vd_source7a1a0bc74158c6993c7355c5490fc600 可以理解为&#xff0c;调用远程服务器上的一个方法/函数/服务的方式&#xff0c;同时隐藏网络细节 一个 python3 …...

PCL 基于Ransac提取误匹配点对

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 基于RANSAC的误匹配点对提出函数 2.1.2 点云可视化函数 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接: PCL点云算法与项目实战案例汇总(长期更新) 一、…...

光速写作 2.0.5 | 专注AI写作,海量素材库

光速写作是一款专为解决写作难题设计的应用。它具有以下功能&#xff1a;- 「AI写作」&#xff1a;帮助分析题目、整理写作思路&#xff0c;合成作文&#xff0c;写出好文章。- 「作文批改」&#xff1a;拍照上传作文后&#xff0c;进行全文点评和分句点评&#xff0c;并进行全…...

【已解决,含泪总结】非root权限在服务器上配置python和torch环境,代码最终成功训练(一)

配置Python环境 没有root权限服务器上有多个python环境但没有自己想要的怎么办 之前跑别的实验的时候改过指定的python3.7版本&#xff0c;但是居然我过了一段时间之后&#xff0c;再次打开&#xff0c;python版本居然又回到2.7&#xff08;服务器/usr/下的默认python版本&am…...

公安基础知识-通哥

公安机关办理行政案件能力 考点一 治安案件追溯失效 6个月 派出所只有警告和500块以下罚款 公安是行政机关 1、治安小事、刑事案件大事 2、殴打他人-轻伤-&#xff08;刑事案件&#xff09;、轻微伤&#xff08;治安案件&#xff09; 3、《治安处罚法》《刑法》 4、只能构…...

Python画图|极坐标下的散点图动态输出

【1】引言 前序已经学习过散点图输出和极坐标图输出&#xff0c;文章链接包括但不限于下述部分&#xff1a; python画散点图|scatter()函数小试牛刀&#xff08;入门级教程&#xff09;_python ax.scatter-CSDN博客 python画图|极坐标中画散点图_极坐标上的散点图-CSDN博客 …...

揭开MySQL并发中的“死锁”之谜:从原理到解决方案的深度解析

目录 1. 环境准备&#xff1a;创建“账户”和“标记”表1.1 创建 dl_account_t 表1.2 创建 dl_mark_t 表 2. 死锁详解2.1 死锁情景一&#xff1a;相反加锁顺序导致的死锁2.2 死锁情景二&#xff1a;唯一索引冲突引发的死锁 3. 事务隔离级别与锁机制4. 预防与解决死锁的方法4.1 …...

【论文阅读】Reliable, Adaptable, and Attributable Language Models with Retrieval

文章目录 OverviewCurrent Retrieval-Augmented LMsArchitectureTraining Limitations & Future Work Overview Parametic language models的缺点&#xff1a; 事实性错误的普遍存在验证的难度&#xff08;可溯源性差&#xff09;难以在有顾虑的情况下排除某些序列适应调整…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...