欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring Boot

程序员文章站 2022-03-04 13:50:57
...
  1. Structuring your code

Spring Boot 不需要依赖其他额外的代码工作, 但是, 这里有一些好的建议.

1.1 Using the “default” package

当一个类不包含包声明那么它可以被认为是在 “default package”中的. 通常不建议使用 “default package”, 而且应该尽量避免. 对于那些用了 @ComponentScan,@EntityScan 或者 @SpringBootApplication 注解的Spring Boot applications 会造成一些特定的错误, 因为每个包里的每个jar都会被注入进来.

1.2 Locating the main application class

我们建议你把 main application class 反正root package中比所有其他的包都高一级. @EnableAutoConfiguration 注解通常会放在 main class上, 这为特定的东西隐式的定义了一个基础的“search package”. 比如, 如果你在写一个 JPA application, 有使用了@EnableAutoConfiguration 注解的class的包 回去查找 @Entity 的items.
用来root package之后同样允许 @ComponentScan 注解在使用到时候可以不需要 basePackage 属性. 当main方法在root package中的时候你也可以使用 @SpringBootApplication 注解。
典型工程结构:

com
 +- example
     +- myproject
         +- Application.java
          |
         +- domain
          | +- Customer.java
          | +- CustomerRepository.java
          |
         +- service
          | +- CustomerService.java
          |
         +- web
            +- CustomerController.java

Application.java 文件中会包含 main 方法, 并且有 @Configuration注解。

package com.example.myproject;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

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

2. Configuration classes

Spring Boot 偏好基于Java的配置. 虽然可以通过调用 SpringApplication.run()通过一个 XML 源来配置, 但我们通常 推荐你的主源是一个 @Configuration class. 通常这个class定义的main 方法也是一个主 @Configuration的好的候选.

网上许多案例都用的XML配置.如果可以尝试使用相同的基于Java的配置. 可以通过搜索enable注解来尝试看看.

2.1 Importing additional configuration classes

你不需要把所有类都加上 @Configuration 注解。 @Import 注解可以用来引入添加的配置类. 同时, 也可以用 @ComponentScan 来自动的获取所有Spring组件, 包括 @Configuration 类.

2.2 Importing XML configuration

如果你非得要用XML配置, 我们还是建议从 @Configuration 类开始. 然后用 @ImportResource 注解来加载XML配置文件.

3. Auto-configuration

Spring Boot auto-configuration 希望通过之前添加的jar依赖来实现 自动的配置你的Spring Application. 比如, 如果 HSQLDB 在你的 classpath中, 而且你没有配置任何数据库相关的bean,这时我们会自动配置一个内存数据库. 你需要添加 @EnableAutoConfiguration@SpringBootApplication 注解在某一个 @Configuration 类中。

你只能加一个 @EnableAutoConfiguration 注解. 通常建议加在主 @Configuration 类上.

3.1 Gradually replacing auto-configuration

Auto-configuration是非侵入的, 你可以用自己的配置来替换任意一段 auto-configuration. 比如, 如果你加了自己的 DataSource bean, 那么默认的嵌入式数据库会失效.
如果你想知道当前哪些 auto-configuration 正在被使用以及为什么, 通过打开debug开关的方式启动,auto-configuration报告会打印在console扣上。

3.2 Disabling specific auto-configuration

如果你发现某个被auto-configure应用的配置类不是你想要的,可以通过使用@EnableAutoConfiguration注解来排除他们。

import org.springframework.boot.autoconfigure.*;
import org.springframework.boot.autoconfigure.jdbc.*;
import org.springframework.context.annotation.*;

@Configuration
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class MyConfiguration {

}

如果类不在 classpath中, 可以通过@EnableAutoConfiguration注解的 excludeName 属性来排除,排除的时候使用全路径名称。最后,你还可以通过控制auto-configuration类的列表来排除 spring.autoconfigure.exclude属性。

在属性中和注解上都能定义例外。