美文网首页Spring Boot 从入门到上瘾
SpringBoot 快速掌握工程结构

SpringBoot 快速掌握工程结构

作者: 一只袜子 | 来源:发表于2017-09-25 18:53 被阅读1631次

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

    一、整体结构图

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

    github.com/yizhiwazi

    二、主要用途(必读)

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

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

    三、关于启动类的放置

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

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

    提问:为什么启动类“约定”放在RootPackage呢?
    解答:
    • ① 如果将启动类放在顶层,然后使用注解@SpringBootApplication 就能快速完成组件扫描,例如:
    @SpringBootApplication
    public class HelloApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(HelloApplication.class, args);
        }
    }
    
    • ② 这是为什么呢,我们继续观察 @SpringBootApplication 的源代码,不难发现,作为启动类的便携式入口注解,其主要由三大部件组成,其中@ComponentScan 这个注解就是本案的关键,根据SpringBoot的内置实现,让Spring默认从这个注解所在的位置开始向后扫描,也就是说,只要我们将组建放在启动类所在的RootPackage的子包,就可以被Spring扫描并注入Bean容器。
    @SpringBootConfiguration
    @EnableAutoConfiguration
    @ComponentScan
    public @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目录优先级最高。

    相关文章

      网友评论

        本文标题:SpringBoot 快速掌握工程结构

        本文链接:https://www.haomeiwen.com/subject/toldextx.html