SpringBoot2(005):关于工程代码结构的建议

 Spring Boot2系列文章可以通过这里进行回顾:SpringBoot2(001):入门介绍、官网参考和博客汇总 


  spring boot 对于工程代码结构并没有特殊的要求,正常来说是可以对代码结构进行任意布局的。但是呢,“约定大于配置”,如果想要按照 springboot 的默认套路来,肯定是需要遵守一些潜在的约定的。接下来这篇就介绍 springboot 提供的关于代码结构的 2点 最佳实践建议,主要参考:14. Structuring Your Code ,目录结构如下:

 

1、避免使用 default 包

  没有 package 声明的类被认为是在 default 包中。通常不建议而且应该避免 default 包default 包对于使用 @ComponentScan@EntityScan@SpringBootApplication 注解的 Spring Boot 应用来说,可能会导致一些问题,因为每个 jar 中的每个类可能都会被读取(不指定扫描的 package 路径的话,spring boot 默认从这些有注解的类所属的 package 进行扫描,这里的 default 包变成了所有代码的根路径)。

  注:对于包命名,建议使用 Java 推荐的反向域名命名约定,例如:com.example.project,像 springboot 用的则是 org.springframework.boot

 

2、主类 ( main application class ) 放置在root package

  通常建议将主类( main application class ,含有 main 方法的类)放置在其他类之上的 根package (root package)下,而且 @SpringBootApplication 注解也通常声明在主类上,它隐式地为某些项定义了基本的“搜索包”(search package,默认的 scan 路径)。例如在写 JPA 应用时,有 @SpringBootApplication 注解的类所属的 package 将被用于搜索 @Entity ,还有 @Service 等等注解都会进行扫描。使用 root package 允许 component scan 只应用于你的工程,而不会扫描其他的 jar 包。换句话说,就是限定了 scan 的范围从本工程的 root packag 开始,不会对所有 jar 包进行全扫描。

  小技巧:如果不想使用 @SpringBootApplication,可以使用 @EnableAutoConfiguration 和 @ComponentScan 进行代替和指定 scan 哪些 package
  下面的例子演示了一个典型的 spring boot 应用的包布局结构:

com
  +- example
       +- myapplication
            +- Application.java
            |
            +- customer
            |    +- Customer.java
            |    +- CustomerController.java
            |    +- CustomerService.java
            |    +- CustomerRepository.java
            |
            +- order
                 +- Order.java
                 +- OrderController.java
                 +- OrderService.java
                 +- OrderRepository.java

   这里 root package 是 com.example.myapplication, Application.java 中会有 main 函数,同时会有 @SpringBootApplication 注解,默认扫描 com.example.myapplication 下的所有相关注解,配上这个例子应该可以更好地理解上面的内容:

package com.example.myapplication;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

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

   以上便是入手使用 springboot 时关于工程代码结构方面比较推荐的2个最佳实践。 

 

3、参考

 

posted @ 2019-11-18 20:59  心明谭  阅读(379)  评论(0编辑  收藏  举报