Spring Boot

  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属性。

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容