# 代码结构
# 启动类的位置
通常建议你将你启动类放在一个根 package 中,高于其他的类, @SpringBootApplication 注解一般都是注解在启动类上的。它默认会扫描当前类下的所有子包。例如,如果你正在编写一个 JPA 应用程序,你的  @Entity  类只有定义在启动类的子包下才能被扫描加载到。
一个项目典型的布局如下。
com  | |
+- example  | |
+- myapplication  | |
+- MyApplication.java  | |
         | | |
+- customer  | |
         |   +- Customer.java | |
         |   +- CustomerController.java | |
         |   +- CustomerService.java | |
         |   +- CustomerRepository.java | |
         | | |
+- order  | |
+- Order.java  | |
+- OrderController.java  | |
+- OrderService.java  | |
+- OrderRepository.java  | 
MyApplication.java  文件声明了  main  方法,以及标识了基本的  @SpringBootApplication  注解。
将表对应的实体类、接口、服务层、控制层放在同一个文件夹中。
# Spring Bean 和 依赖注入
Bean 应该就是组件
可以使用任何标准的 Spring 技术来定义你的 Bean 以及依赖注入关系。 推荐使用构造函数注入,并使用  @ComponentScan  注解来扫描 Bean。
可以在启动类添加  @ComponentScan  注解,也不需要定义它任何参数, 你的所有应用组件( @Component 、 @Service 、 @Repository 、 @Controller  和其他)都会自动注册为 Spring Bean。
也可以直接使用  @SpringBootApplication  注解(该注解已经包含了  @ComponentScan )。
# 构造函数注入依赖
下面的例子展示了一个  @Service  Bean,它使用构造器注入的方式注入了  RiskAssessor  Bean。
@Service  | |
public class MyAccountService implements AccountService {  | |
private final RiskAssessor riskAssessor;  | |
public MyAccountService(RiskAssessor riskAssessor) {  | |
this.riskAssessor = riskAssessor;  | |
	}  | |
	// ...  | |
} | 
如果一个 Bean 有多个构造函数,你需要用  @Autowired  注解来告诉 Spring 该用哪个构造函数进行注入。
# @SpringBootApplication 注解
在主应用类中,使用  @SpringBootApplication  注解来启用 Spring Boot。
一个  @SpringBootApplication  注解就可以用来启用多个功能,比如:
@EnableAutoConfiguration:启用 Spring Boot 的自动配置机制。@ComponentScan:对应用程序所在的包启用@Component扫描(见最佳实践)。@SpringBootConfiguration:允许在 Context 中注册额外的 Bean 或导入额外的配置类。这是 Spring 标准的@Configuration的替代方案,有助于在你的集成测试中检测配置。
这些功能都不是强制必须的,你可以随时只使用其中任意功能的注解。
# 运行应用与打包
打包成 jar 文件运行或部署。可执行 jar 可以用于生产环境,由于它们是独立的,非常适合部署到云服务中。