首页 > 代码库 > SpringBoot基础

SpringBoot基础

1.定位main应用类,Spring Boot应用的入口

我们通常建议将main应用类放在位于其他类上面的根包( root package) 中。 通常使用 @EnableAutoConfiguration 注解
main类, 并且暗地里为某些项定义了一个基础“search package”。 例如, 如果你正在编写一个JPA应用,被 @EnableAutoConfiguration 注解的类所在包将被用来自动搜索 @Entity 项。会自动加载main应用类所在的包下的注解。
使用根包允许你使用 @ComponentScan 注解而不需要定义一个 basePackage 属性。 如果main类位于根包中, 你也可以使
用 @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@ComponentScanpublic class Application {    public static void main(String[] args) {        SpringApplication.run(Application.class, args);    }}

2.配置类@configuration

Spring Boot提倡基于Java的配置。 尽管你可以使用一个XML源来调用 SpringApplication.run() , 我们通常建议你使
用 @Configuration 类作为主要源。 一般定义 main 方法的类也是主要 @Configuration 的一个很好选择。
@Configuration主要配置生成Bean的配置类。

  • 导入其他配置类
    你不需要将所有的 @Configuration 放进一个单独的类。 @Import 注解可以用来导入其他配置类。 另外, 你也可以使
    用 @ComponentScan 注解自动收集所有的Spring组件, 包括 @Configuration 类。

  • 导入xml配置
    如果你必须使用基于XML的配置, 建议你仍旧从一个 @Configuration 类开始。 可以使用附加的 @ImportResource 注
    解加载XML配置文件。

3.自动配置

Spring Boot自动配置( auto-configuration) 尝试根据你添加的jar依赖自动配置你的Spring应用。 例如, 如果你的classpath下
存在 HSQLDB , 并且你没有手动配置任何数据库连接beans, 那么我们将自动配置一个内存型( in-memory) 数据库。
你可以通过将 @EnableAutoConfiguration 或 @SpringBootApplication 注解添加到一个 @Configuration 类上来选择自动配置。
注:你只需要添加一个 @EnableAutoConfiguration 注解。 建议你将它添加到主 @Configuration 类上。

  • 逐步替换自动配置
    自动配置是非侵占性的, 任何时候你都可以定义自己的配置类来替换自动配置的特定部分。 例如, 如果你添加自己
    的 DataSource bean, 默认的内嵌数据库支持将不会被加载。
    如果需要找出当前应用了哪些自动配置及应用, 你可以使用 --debug 开关启动应用。 这将会记录一个自动配置的报告
    并输出到控制台。

  • 禁用特定的自动配置
    如果发现应用了你不想要的特定自动配置类, 你可以使用 @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 {}

4.Spring Beans和依赖注入

你可以自由地使用任何标准的Spring框架技术去定义beans和它们注入的依赖。 简单起见, 经常使用 @ComponentScan 注解搜索beans, 并结合 @Autowired 构造器注入。
如果使用上面建议的结构组织代码( 将应用类放到根包下) , 你可以添加 @ComponentScan 注解而不需要任何参数。 你的所有应用程序组件( @Component , @Service , @Repository , @Controller 等) 将被自动注册为Spring Beans

下面是一个 @Service Bean的示例, 它使用构建器注入获取一个需要的 RiskAssessor bean。

package com.example.service;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;@Servicepublic class DatabaseAccountService implements AccountService {    private final RiskAssessor riskAssessor;    @Autowired    public DatabaseAccountService(RiskAssessor riskAssessor) {        this.riskAssessor = riskAssessor;    } // ...}

注:注意如何使用构建器注入来允许 riskAssessor 字段被标记为 final , 这意味着 riskAssessor 后续是不能改变的。

5.使用@SpringBootApplication注解

很多Spring Boot开发者总是使用 @Configuration , @EnableAutoConfiguration 和 @ComponentScan 注解他们的main类。 遵循最简原则, Spring Boot提供一个方便的 @SpringBootApplication 以供选择。等同于原来的@Configuration、@EnableAutoConfiguration、@ComponentScan三个注解同时使用

下面是@SpringBootApplication的注解

package com.example.myproject;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication // same as @Configuration @EnableAutoConfiguration @ComponentScanpublic class Application {    public static void main(String[] args) {        SpringApplication.run(Application.class, args);    }}

SpringBoot基础