深入理解Spring Boot:启动方式、注解、配置文件与模板引擎

news2025/1/23 17:16:31

引言

        Spring Boot 是一个用于简化 Spring 应用初始搭建以及开发过程的框架。它通过约定大于配置的方式,大大减少了开发者需要编写的配置代码。本文将详细介绍 Spring Boot 的启动方式、核心注解的用法及含义、配置文件的书写格式以及模板引擎的使用方法。

Spring Boot 的启动方式

Spring Boot 应用有多种启动方式,以下是最常见的三种方式:

1.直接运行主类的 main 方法

        这是最常见的启动方式。只需在主类中添加 @SpringBootApplication 注解,并提供 main 方法即可。

package com.ffyc;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}

2.使用 @ComponentScan 注解显式指定扫描包

        如果你有多个程序需要启动,那么给每个添加单独的注解就显得很麻烦,可以使用 @ComponentScan 注解显式指定需要扫描的包。

package com.ffyc.service;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan("com.ffyc.service")
public class HelloService {
    public static void main(String[] args) {
        SpringApplication.run(HelloService.class, args);
    }
}

 3.使用@SpringBootApplication

  @SpringBootApplication是Spring Boot的核心注解,它集成了@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan,简化了配置过程。

@SpringBootApplication
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}

关键注解解释

 @SpringBootApplication

结合@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan,简化配置。

@ComponentScan

指定扫描组件的包路径,自动识别@Component@Service@Repository等注解的类。

@RestController@RequestMapping

用于创建RESTful控制器,处理HTTP请求。

@RestController
@RequestMapping("/hello")
public class HelloController {
    @RequestMapping
    public String sayHello() {
        return "Hello, Spring Boot!";
    }
}

 配置文件:application.properties 和 application.yml

        Spring Boot 支持两种配置文件格式:application.properties 和 application.yml

application.properties

application.properties 是传统的 Properties 文件格式,每行配置一个键值对。

# application.properties
spring.freemarker.template-loader-path=classpath:/templates/
spring.freemarker.suffix=.ftl

application.yml

application.yml 是 YAML 格式的配置文件,支持层次化配置,也是大多数常用的。

# application.yml
management:
  name: zhangsan
  age: 25

配置文件的优先级

Spring Boot 会按照以下顺序加载配置文件:

  1. application.properties

  2. application.yml

  3. 命令行参数

  4. 环境变量

  5. 外部配置文件(如 application-xxx.properties 或 application-xxx.yml

整合静态资源

        在 Spring Boot 中,静态资源默认放在 src/main/resources/static 目录下。Spring Boot 会自动将该目录下的资源映射到根路径 /

例如,如果你在 static 目录下有一个 index.html 文件,可以通过 http://localhost:8080/index.html 访问。

模板引擎:Freemarker

什么是模板引擎

        模板引擎是一种用于生成文本输出的工具,通常用于生成 HTML 页面。它允许你将代码和内容分离,从而使代码更清晰、更易于维护。

常用的模板引擎

  • Thymeleaf: 一个现代化的模板引擎,支持 HTML5。

  • Freemarker: 一个强大的模板引擎,支持复杂的逻辑。

  • Velocity: 一个简单易用的模板引擎。

Freemarker 的配置与使用

配置 Freemarker

在 application.properties 中配置 Freemarker 的模板路径和后缀:

spring.freemarker.template-loader-path=classpath:/templates/
spring.freemarker.suffix=.ftl
 创建 Freemarker 模板

在 src/main/resources/templates 目录下创建 freemarkerIndex.ftl 文件:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Freemarker Index</title>
</head>
<body>
${message}
</body>
</html>
控制器类
package com.ffyc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.Map;

@Controller
public class FreemarkerIndexController {

    @RequestMapping("/freemarkerIndex")
    public String freemarkerIndex(Map<String, String> result) {
        result.put("message", "Hello, Freemarker!");
        return "freemarkerIndex";
    }
}

配合 @Value 注解进行页面渲染

在服务类中使用 @Value 注解

package com.ffyc.service;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MemberService {

    @Value("${management.name}")
    private String name;

    @Value("${management.age}")
    private String age;

    @RequestMapping("/management")
    public String management() {
        return name + "--" + age;
    }
}

在 Freemarker 模板中使用变量

注意页面现在只需要这种写法就可以,${message}

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Freemarker Index</title>
</head>
<body>
${message}
</body>
</html>

总结

        介绍了 Spring Boot 的启动方式、核心注解的用法及含义、配置文件的书写格式以及模板引擎 Freemarker 的使用方法。通过这些内容,你应该能够更好地理解和应用 Spring Boot 进行开发。希望这篇博客能帮助你更好地理解 Spring Boot 的各种概念和用法。如果你有任何问题或建议,欢迎在评论区留言!

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

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

相关文章

SpringBoot为什么要禁止循环依赖?

大家好&#xff0c;我是锋哥。今天分享关于【SpringBoot为什么要禁止循环依赖?】面试题。希望对大家有帮助&#xff1b; SpringBoot为什么要禁止循环依赖? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Spring Boot 禁止循环依赖的原因与 Spring 框架本身的设计…

利用Qt5.15.2编写Android程序时遇到的问题及解决方法

文章目录 背景1.文件读写 背景 目前我用的是Qt5.15.2来编写Qt程序&#xff0c;环境的配置看我这篇文章【Qt5.15.2配置Android开发环境】 项目中的一些配置的截图&#xff1a; 1.文件读写 假如直接用 QFileDialog::getExistingDirectory来获取路径的话&#xff0c;会得到类…

RV1126+FFMPEG推流项目源码

源码在我的gitee上面&#xff0c;感兴趣的可以自行了解 nullhttps://gitee.com/x-lan/rv126-ffmpeg-streaming-projecthttps://gitee.com/x-lan/rv126-ffmpeg-streaming-project

三维扫描赋能文化:蔡司3D扫描仪让木质文化遗产焕发新生-沪敖3D

挪威文化历史博物馆在其修复工作中融入现代3D扫描技术&#xff0c;让数百年的历史焕发新生。 文化历史博物馆的工作 文化历史博物馆是奥斯陆大学的一个院系。凭借其在文化历史管理、研究和传播方面的丰富专业知识&#xff0c;该博物馆被誉为挪威博物馆研究领域的领先机构。馆…

2024年美赛C题评委文章及O奖论文解读 | AI工具如何影响数学建模?从评委和O奖论文出发-O奖论文做对了什么?

模型假设仅仅是简单陈述吗&#xff1f;允许AI的使用是否降低了比赛难度&#xff1f;还在依赖机器学习的模型吗&#xff1f;处理题目的方法有哪些&#xff1f;O奖论文的优点在哪里&#xff1f; 本文调研了当年赛题的评委文章和O奖论文&#xff0c;这些问题都会在文章中一一解答…

Text2Sql:开启自然语言与数据库交互新时代(30/30)

一、Text2Sql 简介 在当今数字化时代&#xff0c;数据处理和分析的需求日益增长。对于众多非技术专业人员而言&#xff0c;数据库操作的复杂性常常成为他们获取所需信息的障碍。而 Text2Sql 技术的出现&#xff0c;为这一问题提供了有效的解决方案。 Text2Sql&#xff0c;即文…

初阶5 排序

本章重点 排序的概念常见排序的算法思想和实现排序算法的复杂度以及稳定性分析 1.排序的概念 排序: 所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。稳定性: 假定在待排序的记录序列中&#xff0…

【优选算法】6----查找总价格为目标值的两个商品

这道题相对于前寄到算法题较为容易~ 同样也是使用了双指针的算法哦~ ----------------------------------------begin-------------------------------------- 题目解析&#xff1a; 题目也是很简单地一句话&#xff0c;但是意图还是很明确~ 讲解算法原理&#xff1a; 同样的&…

windows11关闭系统更新详细操作步骤

文章目录 1.打开注册表2.修改注册表内容2.1 新建文件2.2 修改值 3.修改设置 1.打开注册表 winR输入regedit(如下图所示) 2.修改注册表内容 进HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings 2.1 新建文件 右侧界面右键即可 2.2 修改值 重命名为如下…

HTML5使用favicon.ico图标

目录 1. 使用favicon.ico图标 1. 使用favicon.ico图标 favicon.ico一般用于作为网站标志&#xff0c;它显示在浏览器的地址栏或者标签上 制作favicon图标 选择一个png转ico的在线网站&#xff0c;这里以https://www.bitbug.net/为例。上传图片&#xff0c;目标尺寸选择48x48&a…

C++打字模拟

改进于 文宇炽筱_潜水 c版的打字效果_c自动打字-CSDN博客https://blog.csdn.net/2401_84159494/article/details/141023898?ops_request_misc%257B%2522request%255Fid%2522%253A%25227f97863ddc9d1b2ae9526f45765b1744%2522%252C%2522scm%2522%253A%252220140713.1301023…

图像处理基础(3):均值滤波器及其变种

均值滤波器可以归为低通滤波器&#xff0c;是一种线性滤波器&#xff0c;其输出为邻域模板内的像素的简单平均值&#xff0c;主要用于图像的模糊和降噪。 均值滤波器的概念非常的直观&#xff0c;使用滤波器窗口内的像素的平均灰度值代替图像中的像素值&#xff0c;这样的结果就…

《2024年度网络安全漏洞威胁态势研究报告》

2024年&#xff0c;全球网络安全领域继续面对日益严峻的挑战。在数字化转型的大背景下&#xff0c;漏洞利用成为网络攻击的重中之重。根据统计&#xff0c;全球新增漏洞数量再创新高&#xff0c;漏洞的复杂性加剧&#xff0c;修复周期也在不断缩短。然而&#xff0c;攻击者的手…

备赛蓝桥杯之第十五届职业院校组省赛第二题:分享点滴

提示&#xff1a;本篇文章仅仅是作者自己目前在备赛蓝桥杯中&#xff0c;自己学习与刷题的学习笔记&#xff0c;写的不好&#xff0c;欢迎大家批评与建议 由于个别题目代码量与题目量偏大&#xff0c;请大家自己去蓝桥杯官网【连接高校和企业 - 蓝桥云课】去寻找原题&#xff0…

winfrom项目,引用EPPlus.dll实现将DataTable 中的数据保存到Excel文件

最近研究不安装office也可以保存Excel文件&#xff0c;在网上查询资料找到这个方法。 第一步&#xff1a;下载EPPlus.dll文件&#xff08;自行去网上搜索下载&#xff09; 第二步&#xff1a;引用到需要用的项目中&#xff0c;如图所示&#xff1a; 第三步&#xff1a;写代码…

失业ing

零零碎碎记一下unity相关的东西备忘 渲染&#xff1a; https://github.com/festivities/PrimoToon 仿原神的卡通渲染&#xff0c; 参照这种文档&#xff1a; Unity Built-in Shader转URP Shader 接口查询对照表之类的 自己强行改api到urp可用&#xff0c;改了三四天&…

Linux——多线程的控制

Linux——线程的慨念及控制-CSDN博客 文章目录 目录 文章目录 前言 一、线程函数的认识 1、基本函数的回顾 1、线程的创建pthread_create 2、线程阻塞pthread_join 3、线程退出pthread_exit 2、线程的分离pthread_detach 3、互斥锁初始化函数&#xff1a;pthread_mutex_init 4、…

“AI教学培训信息资源综合管理系统:让教学更精准、更高效

大家好&#xff0c;作为一名资深产品经理&#xff0c;今天我就跟大家聊聊AI教学培训信息资源综合管理系统。在这个信息爆炸的时代&#xff0c;如何高效地管理教学培训信息资源&#xff0c;成为了教育行业的一大痛点。而AI技术的融入&#xff0c;无疑为解决这个问题提供了强有力…

Net Core微服务入门全纪录(三)——Consul-服务注册与发现(下)

系列文章目录 1、.Net Core微服务入门系列&#xff08;一&#xff09;——项目搭建 2、.Net Core微服务入门全纪录&#xff08;二&#xff09;——Consul-服务注册与发现&#xff08;上&#xff09; 3、.Net Core微服务入门全纪录&#xff08;三&#xff09;——Consul-服务注…

vue3+webOffice合集

1、webOffice 初始化 1&#xff09;officeType: 文档位置&#xff1a;https://solution.wps.cn/docs/web/quick-start.html#officetype 2&#xff09;appId: 前端使用appId 后端需要用到AppSecret 3&#xff09;fileId: 由后端返回&#xff0c;前端无法生成&#xff0c;与上传文…