springboot service找不到_SpringBoot 快速掌握工程结构

本文介绍了SpringBoot工程的常见结构,包括启动类的位置、静态资源的放置,并解析了@ComponentScan注解如何实现组件扫描,强调了SpringBoot的约定优于配置原则。
摘要由CSDN通过智能技术生成

作者:yizhiwazi
链接:https://www.jianshu.com/p/6dcfe16d91d0

序言:SpringBoot 的核心理念是约定优于配置,例如在资源目录的static放置静态资源就能直接访问,templates目录放置动态页面就能自动初始化和实现访问,例如Thymeleaf、FreeMaker等。

一、整体结构图

SpringBoot 官方并不要求特殊的工程结构,但在实际开发中,我们往往遵循一定的规范来组织代码结构,例如下面的典型结构图:

618bbdaa43595236698c177267d1ba2e.png

二、主要用途(必读)

使用 Spring Initializr 构建的SpringBoot工程的各目录,如下图所示:

0d1b70c45afac9c7ee0a16f938d4d54b.png

重要提示:SpringBoot 官方推荐我们使用轻量级的Jar File 格式来打包和部署工程,如果想部署War File的传统Web项目,则必须添加webapp目录,和进行相关初始化才能正常使用,详情点击:SpringBoot 添加对JSP的支持

三、关于启动类的放置

官方文档是有提到 main application class的,但隐藏得比较深,大概老外都觉得是共识,不过这对刚入门的新手显然是个坑。。

在 SpringBoot 快速入门 案例中我们轻松的就完成了RestAPI的访问,兴奋感溢于言表,但很快你可能会发现一些端倪,为什么通篇找不到关于组件扫描的配置,难道这背后存在什么潜规则?

dd6da6c0cf9a33194fc7b1d1a14147de.png

提问:为什么启动类“约定”放在RootPackage呢?

解答:

  • ① 如果将启动类放在顶层,配合注解@SpringBootApplication 实现默认向后扫描,例如:
@SpringBootApplicationpublic class HelloApplication { public static void main(String[] args) { SpringApplication.run(HelloApplication.class, args); }}
  • ② 这是为什么呢,我们继续观察 @SpringBootApplication 的源代码,不难发现,作为启动类的便携式入口注解,其主要由三大部件组成,其中@ComponentScan 这个注解就是本案的关键,根据SpringBoot的内置实现,Spring从这个注解所在的位置默认向后扫描,包括常见的Controller、Service、Entity都可以扫描到。
@SpringBootConfiguration@EnableAutoConfiguration@ComponentScanpublic @interface SpringBootApplication {}
  • ③ 总结:将启动类放置在RootPackage,可以隐式完成组件扫描,不需要单独定义@ComponentScan(basePackages="com.hehe.xx"),践行了SpringBoot 约定优于配置的核心理念。

四、关于静态资源的放置

Spring Boot 默认“约定”从资源目录的这些子目录读取静态资源:

  • src/main/resources/META-INF/resources
  • src/main/resources/static (推荐)
  • src/main/resources/public

举个栗子:现在static目录下有一张图片,kumamon.jpg

访问地址: http://localhost:8080/img/kumamon.jpg

注:若不同静态目录含有相同路径图片,则按上述优先级,即META-INF/resources目录优先级最高。

我自己是一名从事了多年开发的Java老程序员,辞职目前在做自己的Java私人定制课程,今年年初我花了一个月整理了一份最适合2019年学习的Java学习干货,从最基础的JavaSE到Spring各种框架都有整理,送给 每一位Java小伙伴,想要获取的可以关注我的头条号并在后台私信我:Java,即可免费获取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值