SpringBoot⼯程结构
序⾔:SpringBoot 的核⼼理念是约定优于配置,例如在资源⽬录的static放置静态资源就能直接访问,templates⽬录放置动态页⾯就能⾃动初始化和实现访问,例如Thymeleaf、FreeMaker等。
⼀、整体结构图
SpringBoot 官⽅并不要求特殊的⼯程结构,但在实际开发中,我们往往遵循⼀定的规范来组织代码结构,例如下⾯的典型结构图:
⼆、主要⽤途(必读)
使⽤构建的SpringBoot⼯程的各⽬录,如下图所⽰:
重要提⽰:SpringBoot 官⽅推荐我们使⽤轻量级的Jar File 格式来打包和部署⼯程,如果想部署War File的传统Web项⽬,则必须添加webapp⽬录,和进⾏相关初始化才能正常使⽤,详情点击:
三、关于启动类的放置
官⽅⽂档是有提到的,但隐藏得⽐较深,⼤概⽼外都觉得是共识,不过这对刚⼊门的新⼿显然是个坑。。
在案例中我们轻松的就完成了RestAPI的访问,兴奋感溢于⾔表,但很快你可能会发现⼀些端倪,为什么通篇不到关于组件扫描的配置,难道这背后存在什么潜规则?
提问:为什么启动类“约定”放在RootPackage呢?
解答:
①如果将启动类放在顶层,配合注解@SpringBootApplication 实现默认向后扫描,例如:
springboot推荐算法@SpringBootApplication
public class HelloApplication {
public static void main(String[] args) {
SpringApplication.run(HelloApplication.class, args);
}
}
②这是为什么呢,我们继续观察 @SpringBootApplication 的源代码,不难发现,作为启动类的便携式⼊⼝注解,其主要由三⼤部件组成,其中@ComponentS can 这个注解就是本案的关键,根据SpringBoot的内置实现,Spring从这个注解所在的位置默认向后扫描,包括常见的Controller、Service、Entity都可以扫描到。
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
public @interface SpringBootApplication {
}
③总结:将启动类放置在RootPackage,可以隐式完成组件扫描,不需要单独定义@ComponentScan(basePackages=""),践⾏了SpringBoot 约定优于配置的核⼼理念。
四、关于静态资源的放置
Spring Boot 默认“约定”从资源⽬录的这些⼦⽬录读取静态资源:
src/main/resources/META-INF/resources
src/main/resources/static(推荐)
src/main/resources/public
举个栗⼦:现在static⽬录下有⼀张图⽚,kumamon.jpg
注:若不同静态⽬录含有相同路径图⽚,则按上述优先级,即META-INF/resources⽬录优先级最⾼。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论