查看原文
其他

Spring Boot 主类及目录结构介绍

不羁码农 Java技术栈 2018-11-13

Java技术栈

www.javastack.cn

优秀的Java技术公众号

Spring Boot 与传统项目最大的区别是,传统项目都是打成 WAR 包部署到服务器上面,需要额外的 Servlet 容器, 而 Spring Boot 则可以直接打成 jar 包,并内置集成了 Servlet 容器,通过命令 java -jar xx.jar 则可以直接运行,不需要独立的 Servlet 容器。

打成可执行 jar 包后,我们来看下其中的 META-INF/MANIFEST.MF 文件。

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: admin
Start-Class: cn.javastack.MyApplication
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Spring-Boot-Version: 2.0.4.RELEASE
Created-By: Apache Maven 3.5.0
Build-Jdk: 1.8.0_151
Main-Class: org.springframework.boot.loader.JarLauncher

其中有一个 Start-Class 便是这个 jar 包的入口类,这个入口类推荐是放在一个项目的顶层包中,其他所有的类都放在其子包下面,目录结构如以下所示。

cn
 +- javastack
     +- MyApplication.java
     |
     +- customer
     |
   +- Customer.java
     |   +- CustomerController.java
     |
   +- CustomerService.java
     |   +- CustomerRepository.java
     |

     +- order
         +- Order.java
         +- OrderController.java
         +- OrderService.java
         +- OrderRepository.java

这个目录结构是主流及推荐的做法,而在主入口类上加上 @SpringBootApplication 注解来开启 Spring Boot 的各项能力,如自动配置、组件扫描等。

package cn.javastack.MyApplication;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MyApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }

}

如果你不想这么做,你也可以充分利用 @EnableAutoConfiguration 和@ComponentScan 注解自定义你的行为,不过这不是推荐的做法。

(完)


加入知识星球和我一起学习



1,000+ 程序员已加入讨论


往期干货推荐

1. Spring Boot 配置加载顺序详解

2. Spring Boot 2.x 启动全过程源码分析

3. Spring Boot 核心配置文件详解

4. Spring Boot 2.x 新特性及迁移指南

5. 两年 Spring Boot 16 条最佳实践

在后台回复 "boot" 获取更多……


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存