Springboot 项目启动类放置位置

文章目录

    • Springboot 项目启动类放置位置
      • springboot 默认包扫描机制
      • 启动类放在特定位置
      • springboot 启动注解理解
      • 配置启动类扫描特定的包
        • 1、 @ComponentScan
        • 2、利用 @SpringBootApplication 注解的 scanBasePackages 属性

Springboot 项目启动类放置位置

如果我们使用 IDEA 或者 Spring 官网创建 springboot 项目,他会自动将启动类 XxxApplication 放到一个包下面。但是如果想要自己将启动类放在某个位置,那么又将如何操作?

springboot 默认包扫描机制

首先,我们要知道 springboot 默认包扫描机制:默认扫描启动类所在的包同级文件和子包下的文件

springboot 的启动类是不能直接放在 main/java 文件夹下,所在的包是最顶部的包

如下图所示,所有的项目代码都在 com.cuiyuidong.learn 包下,那么把启动类 IntroductionSpringSecurity 放在 com.cuiyuidong.learn 下面就可以扫描到 learn 包下面的所有代码。

启动类配置如下:只需要加上 @SpringBootApplication 注解即可

package com.cuiyuidong.learn;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class IntroductionSpringSecurity {public static void main(String[] args) {SpringApplication.run(IntroductionSpringSecurity.class,args);}
}

在这里插入图片描述

启动类放在特定位置

有时候我们希望把启动类放在同一个特定的位置,但是由于默认包扫描机制,如果我们将启动类放在自己设定的特定位置而不作一些特定配置,那么启动类则不会扫描到所有的包。

如下图所示,将启动类放在 ApplicationSetUp 包下面,启动项目,同时在 Controller 包下创建一个 SpringSecurityController 类,代码如下:

package com.cuiyuidong.learn.Controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class SpringSecurityController {@GetMapping(value = "/hello")public String hello(){return "world hello";}
}

在这里插入图片描述

测试结果:会发现测试结果是 404 Not Found。因为启动类没有扫描到 Controller 这个包。那么要如何解决这个问题呢?

在这里插入图片描述

springboot 启动注解理解

使用 @SpringBootApplication 标注的类是 SpringBoot 的主配置类。核心注解是以下三个:

1. @SpringBootConfiguration 标注在某个类上,表示该类是SpringBoot的配置类
2. @EnableAutoConfiguration 以前我们需要配置的东西,在SpringBoot启动后会帮我们自动配置
3. @ComponentScan 用于通过注解指定spring在创建容器时要扫描的包

配置启动类扫描特定的包

根据上面 springboot 启动注解理解,我们可以通过注解配置扫描特定的包。

1、 @ComponentScan

代码如下: 在启动类上加上 @ComponentScan 注解,同时加上要扫描的包 @ComponentScan(basePackages = "com.cuiyuidong.learn.*"),当然也可以具体到某一个包 @ComponentScan(basePackages = "com.cuiyuidong.learn.Controller")

需要注意的是,如果包下面有很多子包,如 learn 包,那么可以用通配符 .*

package com.cuiyuidong.learn.ApplicationSetUp;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;@SpringBootApplication
@ComponentScan(basePackages = "com.cuiyuidong.learn.*")
public class IntroductionSpringSecurity {public static void main(String[] args) {SpringApplication.run(IntroductionSpringSecurity.class, args);}
}

测试结果:

在这里插入图片描述

2、利用 @SpringBootApplication 注解的 scanBasePackages 属性

代码如下:

package com.cuiyuidong.learn.ApplicationSetUp;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication(scanBasePackages = {"com.cuiyuidong.learn.*"})
public class IntroductionSpringSecurity {public static void main(String[] args) {SpringApplication.run(IntroductionSpringSecurity.class, args);}
}

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

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

相关文章

C++标准模板(STL)- 类型支持 (类型关系,检查两个类型是否相同,std::is_same)

类型特性 类型特性 类型特性定义一个编译时基于模板的结构&#xff0c;以查询或修改类型的属性。 试图特化定义于 <type_traits> 头文件的模板导致未定义行为&#xff0c;除了 std::common_type 可依照其所描述特化。 定义于<type_traits>头文件的模板可以用不完…

【Redux】Redux 基本使用

1. Redux 快速上手 Redux 是 React 最常用的集中状态管理工具&#xff0c;类似于Vue中的Pinia&#xff08;Vuex&#xff09;&#xff0c;可以独立于框架运行。 <button id"decrement">-</button> <span id"count">0</span> <…

Java - 位运算的基本原理和用途

Java - 位运算的基本原理和用途 前言一. Java 位运算基本操作1.1 按位与 &1.2 按位或 |1.3 按位异或 ^1.4 按位取反 ~1.5 位移运算1.5.1 左移运算符 <<1.5.2 右移运算符 >>1.5.3 无符号右移运算符 >>> 二. 位运算实际运用2.1 判断奇偶性&#xff08;&…

SpringSecurity5|12.实现RememberMe 及 实现原理分析

security/day08 这个功能大家还熟悉么&#xff1f;我们在登录网站的时候&#xff0c;除了让你输入用户名和密码&#xff0c;还会有个勾选框&#xff1a; 记住我&#xff01;&#xff01;&#xff01;不是让大家记住我哈。 值得一提的是&#xff0c;Spring Security 也提供了这个…

(C++)字符串相加

愿所有美好如期而遇 题目链接&#xff1a;415. 字符串相加 - 力扣&#xff08;LeetCode&#xff09; 思路 我们看到字符串长度可能到达一万&#xff0c;而且不允许使用处理大整数的库&#xff0c;也就是说&#xff0c;转成整数相加后再转成字符串是不可行的。 那么我们就让…

LCD1602显示自定义字符

代码&#xff1a; #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2); //根据lcd1602的地址修改0x27. dht DHT; byte degree[8] {B00100, B01010, B10001, B10101, B10101, B01110, B00100,B00100 }; //自定义字符的2进制数据 byte customCh…

从0开始学习JavaScript--JavaScript 数字与日期

JavaScript中的数字和日期是处理数值计算和时间相关任务的核心。本文将深入研究JavaScript中数字的表示、常见运算&#xff0c;以及日期对象的创建、格式化等操作&#xff0c;并通过丰富的示例代码&#xff0c;可以更全面地了解和应用这些概念。 JavaScript数字基础 JavaScri…

Shell脚本:Linux Shell脚本学习指南(第一部分Shell基础)一

你好&#xff0c;欢迎来到「Linux Shell脚本」学习专题&#xff0c;你将享受到免费的 Shell 编程资料&#xff0c;以及很棒的浏览体验。 这套 Shell 脚本学习指南针对初学者编写&#xff0c;它通俗易懂&#xff0c;深入浅出&#xff0c;不仅讲解了基本知识&#xff0c;还深入底…

Python中,我们可以使用pandas和numpy库对Excel数据进行预处理,包括读取数据、数据清洗、异常值剔除等

文章目录 一、什么是数据预处理二、对excel数据进行详细的数据预处理操作总结 一、什么是数据预处理 数据预处理是一种对数据进行清洗、整理、转换等操作的过程&#xff0c;旨在提高数据质量&#xff0c;使其适应模型的需求&#xff0c;从而改进数据挖掘或机器学习的结果。 数…

如何在企业签名、超级签名、tf签名之间做选择

企业签名 (Enterprise Signing): 用途&#xff1a; 适用于企业内部发布应用&#xff0c;不需要经过App Store审核&#xff0c;可以通过企业内部渠道直接分发给员工或内部用户。限制&#xff1a; 仅限于企业内部使用&#xff0c;无法在App Store上发布或向外部用户分发。 超级签…

Alien Skin Exposure2024胶片滤镜中文免费版插件

Exposure是一个在你的照片上实现完整个人看法的终极工具。它是一个完整、强大、多才多艺的照片编辑器和组织者&#xff0c;并且带有你在市场上任何软件中都找不到的独特功能。 Alien Skin Exposure是我处理图片主要的一款软件。Exposure整体界面非常直观&#xff0c;而且操作易…

Linux常用命令——bye命令

在线Linux命令查询工具 bye 命令用于中断FTP连线并结束程序。。 补充说明 bye命令在ftp模式下&#xff0c;输入bye即可中断目前的连线作业&#xff0c;并结束ftp的执行。 语法 bye实例 bye在线Linux命令查询工具