SpringBoot快速入门
基本概念
Spring Boot 是一个基于 Spring Framework 的开源框架,旨在简化 Spring 应用程序的开发和部署。它通过提供预先配置的模板、自动配置功能和独立运行的 Jar 包,使开发人员能够快速创建和运行基于 Spring 的生产级别的应用程序。
yml配置
YAML (YAML Ain’t Markup Language) 是一种常用的数据序列化格式,它通常用于配置文件和数据交换。YAML 文件通常以 .yaml
或 .yml
扩展名结尾。下面是 YAML 文件的基本语法和结构的一些关键特性:
基本语法
- YAML 是以纯文本形式编写的。
- 数据是通过缩进来表示层级关系的。
- 键(key)和值(value)之间使用冒号
:
分隔。 - 列表或数组可以使用破折号
-
表示。 - 字典或哈希表可以使用键值对的形式表示。
- 引号不是必需的,除非值包含特殊字符。
常见数据类型
字符串
name: John Doe
数字
age: 30
布尔值
is_admin: true
空值
email:
数组
colors:
- red
- blue
- green
对象
person:
name: Jane Doe
age: 25
is_student: false
复杂结构
嵌套数组
students:
- name: Alice
age: 22
- name: Bob
age: 23
嵌套对象
addresses:
- type: home
street: 123 Main St
city: Anytown
- type: work
street: 456 Market St
city: Businessville
锚点与别名
锚点允许你在 YAML 文档中重复引用同一数据片段,而别名则指向锚点。
- &default_settings
theme: dark
version: 1
user_settings:
<<: *default_settings
theme: light
admin_settings:
<<: *default_settings
version: 2
字面量样式
对于多行字符串或字面量数据,你可以使用 |
或 >
符号来表示。
message: |
This is a multi-line string.
It spans multiple lines.
折叠样式
折叠样式用于表示数组中的多行数据。
fruits: [ >-
Apples,
Bananas,
Oranges ]
流式样式
流式样式是一种紧凑的表示方式,适合简单的数据结构。
- key1: value1
- key2: value2
键的多行表示
如果键很长,可以使用多行形式来表示。
long_key_name:
value: some_value
多文档
可以在一个 YAML 文件中包含多个文档,每个文档以 ---
开始。
---
name: John
age: 30
---
name: Jane
age: 25
注意事项
- 缩进通常使用空格而不是制表符(这是因为不同的系统中tab键的格式不一致)。
- 缩进的数量很重要,因为它定义了层次结构。
- 键名后跟的冒号后面需要有一个空格。
- 对于多行字符串,如果你不希望 YAML 解析器自动去除首尾空白,可以使用
|
或>
后面加-
。
基本注解使用
Spring Boot 提供了一系列的注解来简化开发过程中的配置和组件管理。以下是一些常用的 Spring Boot 注解及其用途:
1. @SpringBootApplication
- 用途:这是一个复合注解,用于标记主配置类。它包含了
@SpringBootConfiguration
、@EnableAutoConfiguration
和@ComponentScan
等注解。 - 示例:
@SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
2. @SpringBootConfiguration
- 用途:表示一个 Spring 配置类。它可以包含
@Bean
方法用于定义 Spring Bean。 - 示例:
@SpringBootConfiguration public class AppConfig { @Bean public MyBean myBean() { return new MyBean(); } }
3. @EnableAutoConfiguration
- 用途:启用 Spring Boot 的自动配置功能,根据类路径中的依赖自动配置 Spring Bean。
- 示例:
@SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
4. @ComponentScan
- 用途:用于指定 Spring 容器扫描的包范围,以发现和管理组件。
- 示例:
@SpringBootApplication @ComponentScan(basePackages = {"com.example"}) public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
5. @Component
, @Service
, @Repository
, @Controller
- 用途:这些注解用于标记组件类,它们分别对应于一般的组件、业务逻辑层组件、数据访问层组件和控制器层组件。
- 示例:
@Service public class UserService { public User getUserById(int id) { // ... } }
6. @RestController
- 用途:结合了
@Controller
和@ResponseBody
注解的功能,用于创建 RESTful Web 服务。 - 示例:
@RestController public class UserController { @GetMapping("/users/{id}") public User getUser(@PathVariable int id) { // ... } }
7. @Autowired
- 用途:用于依赖注入,Spring 会自动为标记了
@Autowired
的字段或方法提供相应的 Bean 实例。 - 示例:
@Service public class UserService { private final UserRepository userRepository; @Autowired public UserService(UserRepository userRepository) { this.userRepository = userRepository; } }
8. @Qualifier
- 用途:用于指定特定的 Bean 实例,当有多个相同类型的 Bean 时,可以使用
@Qualifier
来指定具体使用哪一个。 - 示例:
@Service public class UserService { private final UserRepository userRepository; @Autowired public UserService(@Qualifier("userRepo") UserRepository userRepository) { this.userRepository = userRepository; } }
9. @Value
- 用途:用于注入配置文件中的属性值。
- 示例:
@Service public class ConfigService { @Value("${app.config.property}") private String configProperty; public String getConfigProperty() { return configProperty; } }
10. @ConfigurationProperties
- 用途:用于将配置文件中的属性绑定到 Bean 属性上。
- 示例:
@ConfigurationProperties(prefix = "app.config") public class AppConfig { private String property; public String getProperty() { return property; } public void setProperty(String property) { this.property = property; } }
11. @Profile
- 用途:用于标记特定环境下的配置,例如开发环境、测试环境或生产环境。
- 示例:
@Configuration @Profile("development") public class DevConfig { @Bean public DataSource dataSource() { // ... } }
12. @EnableCaching
- 用途:启用缓存支持。
- 示例:
@Configuration @EnableCaching public class CacheConfig { @Bean public CacheManager cacheManager() { // ... } }
13. @Cacheable
, @CachePut
, @CacheEvict
- 用途:用于缓存方法的结果、更新缓存或清除缓存。
- 示例:
@Service @Cacheable(value = "users", key = "#id") public User getUserById(int id) { // ... }
14. @Transactional
- 用途:用于管理事务。
- 示例:
@Service public class UserService { @Transactional public void updateUser(User user) { // ... } }
15. @EnableScheduling
- 用途:启用定时任务支持。
- 示例:
@Configuration @EnableScheduling public class ScheduleConfig { @Scheduled(cron = "0 0 * * * ?") public void scheduledTask() { // ... } }
@Resource
是 Java 中的一个注解,用于依赖注入(Dependency Injection, DI),它是由 Java 的 JSR-250 规范定义的。@Resource
注解可以用来自动装配 Java Bean 的依赖,它的工作原理类似于 Spring 框架中的 @Autowired
注解。
16.@Resource
- 用途: 自动装配,默认先根据名称进行装配,如果找不到名称就根据类型匹配。
- 示例:
import javax.annotation.Resource;
public class Service {
@Resource
private Repository repository;
}
在这种情况下,Spring 会寻找名称为 repository
的 Bean,并将其注入到 Service
类的 repository
字段中。如果找不到匹配的 Bean 名称,它将尝试按类型匹配。
import javax.annotation.Resource;
public class Service {
@Resource(name = "myRepository")
private Repository repository;
}
这里,@Resource
注解中的 name
属性被明确指定为 "myRepository"
,Spring 将寻找名称为 "myRepository"
的 Bean,并将其注入到 Service
类的 repository
字段中。
这些注解覆盖了 Spring Boot 应用程序中常见的配置和开发需求,使用这些注解可以帮助你更高效地开发 Spring Boot 应用程序。
自动装配流程
Spring Boot 的自动装配机制是一个强大的功能,它简化了配置过程,并自动设置了应用程序所需的组件和服务。以下是 Spring Boot 自动装配的基本流程:
-
启动应用:
- 当你运行 Spring Boot 应用程序时,通常是从一个带有
@SpringBootApplication
注解的主类开始。
- 当你运行 Spring Boot 应用程序时,通常是从一个带有
-
配置类检测:
@SpringBootApplication
注解包含了@SpringBootConfiguration
、@EnableAutoConfiguration
和@ComponentScan
。@SpringBootConfiguration
标识了一个配置类。@ComponentScan
用于扫描指定包下的组件。
-
自动配置:
@EnableAutoConfiguration
启用了自动配置功能。- Spring Boot 会根据类路径上的依赖库自动配置 Bean。
-
条件匹配:
- Spring Boot 使用条件注解(如
@ConditionalOnClass
、@ConditionalOnMissingBean
、@ConditionalOnProperty
等)来决定哪些配置类应该激活。 - 这些条件注解确保只有在满足特定条件时才会激活配置。
- Spring Boot 使用条件注解(如
-
配置 Bean:
- 当条件满足时,Spring Boot 会从自动配置类中创建并注册 Bean 到 Spring 容器中。
- 这些 Bean 通常是通过
@Bean
方法或通过组件扫描找到的组件。
-
属性绑定:
- Spring Boot 使用
@ConfigurationProperties
注解将配置文件中的属性绑定到 Bean 上。 - 这允许用户通过配置文件轻松地修改 Bean 的行为。
- Spring Boot 使用
-
启动完成:
- 一旦所有必要的 Bean 都被配置和注册,Spring Boot 应用程序就准备好了。