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);

    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

常见面试题-MySQL的Explain执行计划

了解 Explain 执行计划吗? 答: explain 语句可以帮助我们查看查询语句的具体执行计划。 explain 查出来的各列含义如下: id:在一个大的查询语句中,每个 select 关键字都对应一个唯一的 id select_type:…

jdk1.8配置tomcat9教程

文章目录 前言报错&尝试解决运行 前言 最近在学习SpringMVC框架,但是里面需要用到Tocmat服务器。作为0基础Java选手,直接找了个视频里面的tomcat包下载。 里面的版本是apache-tomcat-8.5.68-windows-x64.zip的,然后就开始疯狂的各种博客…

巧用SqlServer数据库实现邮件自动发送功能

使用数据库发送邮件需要三个步骤,配置数据库的邮件服务、编写存储过程、设置SQL作业,接下来开始逐步分享: 配置数据库邮件: 在SqlServer左侧菜单栏中,找到管理页签中数据库邮件选项: 接下来开始配置数据库…

wpf devexpress自定义编辑器

打开前一个例子 步骤1-自定义FirstName和LastName编辑器字段 如果运行程序,会通知编辑器是空。对于例子,这两个未命名编辑器在第一个LayoutItem(Name)。和最终用户有一个访客左右编辑器查阅到First Name和Last Name字段,分别。如果你看到Go…

验证码案例 —— Kaptcha 插件介绍 后端生成验证码,前端展示并进行session验证(带完整前后端源码)

🧸欢迎来到dream_ready的博客,📜相信你对这篇博客也感兴趣o (ˉ▽ˉ;) 📜表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手…

力扣每日一题-数位和相等数对的最大和-2023.11.18

力扣每日一题:数位和相等数对的最大和 开篇 这道每日一题还是挺需要思考的,我绕晕了好久,根据题解的提示才写出来。 题目链接:2342.数位和相等数对的最大和 题目描述 代码思路 1.创建一个数组存储每个数位的数的最大值,创建一…

OpenShift 4 - 就地调整 Pod 资源使用量

《OpenShift / RHEL / DevSecOps 汇总目录》 说明:本文已经在 OpenShift 4.14 的环境中验证 文章目录 为什么需要就地调整 Pod 资源启动 InPlacePodVerticalScaling 特性实现就地调整 Pod 资源参考 为什么需要就地调整 Pod 资源 以往在 Kubernetes 中调整 Pod 的 …

CentOS 7搭建Gitlab流程

目录 1、查询docker镜像gitlab-ce 2、拉取镜像 3、查询已下载的镜像 4、新建gitlab文件夹 5、在gitlab文件夹下新建相关文件夹 6、创建运行gitlab的容器 7、查看docker容器 8、根据Linux地址访问gitlab 9、进入docker容器,设置用户名的和密码 10、登录git…

如何从回收站恢复已删除的文件

我们在各个领域都使用计算机。无论是专业工作还是个人工作,我们在生活中总能找到计算机的用途。因此,我们在很大程度上依赖于我们的计算机。计算机是办公室和企业部门使用的高效机器。 人们使用个人计算机发送电子邮件、创建文档、听音乐和观看视频等等…

企业要做大模型落地?建议进来看看这个榜单

机器幻觉问题,可能是未来相当长一段时间内悬浮在大模型领域上方的两片乌云之一。遥记半年前,LeCun 就曾断言:“单纯根据概率生成自回归的大语言模型,根本解决不了幻觉、错误的问题,GPT模型活不过5年”。 当然&#xff…

红队攻防之特殊场景上线cs和msf

倘见玉皇先跪奏:他生永不落红尘 本文首发于先知社区,原创作者即是本人 网络拓扑图 一、msf正向木马拿不出网域控shell msf生成木马 msfvenom -p windows/x64/meterpreter/bind_tcp lport4444 -f raw -o msf1.bin用msfvenom生成一个正向马传进去&…

cs与msf联动

实验环境 cs4.4(4.5版本不知道为啥实现不了) cs服务器与msf在同一台vps上 本地win7虚拟机 cs派生会话给msf 首先cs正常上线win7,这就不多说了,然后说如何将会话派生给msf cs准备 选择Foreign,这里可以选HTTP,也可以选HTTPS…

RK3568驱动指南|第七篇 设备树-第67章 of操作函数实验:获取属性

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…

springBoot中starter

springBoot项目中引入starter 项目引入xxljob&#xff0c;仅需要导入对应的starter包&#xff0c;即可进行快速开发 <dependency><groupId>com.ydl</groupId><artifactId>xxl-job-spring-boot-starter</artifactId><version>0.0.1-SNAPS…

训练模型报错RuntimeError: Input, output and indices must be on the current device

问题出现&#xff1a; 当我训练图网络模型时&#xff0c;源码默认使用cpu&#xff0c;查看后台性能运行&#xff0c;发现正在使用cpu训练&#xff0c;这大大降低了训练速率&#xff0c;并且增加了电脑负载。所以我决定将模型改造并训练放在GPU上运行。 我在train方法中&#xf…

Zabbix5.0部署

环境 主机名 IP 类型server01192.168.134.165zabbix-serverserver02 192.168.134.166zabbix-agent 官方部署文档 1 .安装yum源 [rootserver01 ~]# rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-rel…

2、LeetCode之两数相加

给你两个非空的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照逆序的方式存储的&#xff0c;并且每个节点只能存储一位数字。请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。你可以假设除了数字0之外&#xff0c;这两个数都不会以0开头。 输入&am…

Docker Volume: 实现容器间数据共享与持久化的利器

文章目录 Docker Volume的作用Docker Volume与容器内数据的比较优势劣势 Docker Volume的创建和管理创建Docker Volume管理Docker Volume 演示Docker Volume的挂载Docker Volume的生命周期安全性考虑与Docker Volume应用场景Docker Volume与多容器协作容器迁移与Docker Volume未…

一文带你了解QT Model/View框架的设计思想和实现机制

目录 1、QT Model/View框架简介 1.1、QT Model/View是什么&#xff1f; 1.2、QT Model/View框架核心思想 1.3、Model/View框架工作机制 1.4、Model/View框架的类 2、Model 2.1模型简介 2.2、模型索引 2.3、数据角色 2.4、QStringListModel 2.5、QFileSystemModel 2…

用低代码平台开发应用

低代码一词&#xff0c;有人认为它是第四代编程语言&#xff0c;有人认为它是开发模式的颠覆&#xff0c;也有人认为它是企业管理模式的变革……有很多声音&#xff0c;社区讨论很热烈。 即使这样&#xff0c;至今也有不少人还不知道这项技术&#xff0c;今天笼统的介绍一下低代…