SpringBoot总结

SpringBoot概述

1. 核心概念

1.1 自动配置

  • Spring Boot 根据项目的依赖自动配置 Spring 应用。

  • Spring Boot 会自动配置数据源、JPA 相关 Bean 等。

  • 开发者可以通过 application.properties 或 application.yml 覆盖默认配置。

1.2 约定优于配置(Convention over Configuration)

  • Spring Boot 提供了大量默认配置,开发者只需在需要时进行覆盖。

  • 例如,默认的静态资源路径是 src/main/resources/static,默认的配置文件是 application.properties 或 application.yml

1.3 独立运行(Standalone)

  • Spring Boot 应用可以打包成可执行的 JAR 或 WAR 文件,内嵌 Tomcat、Jetty 或 Undertow 服务器,无需部署到外部容器。

  • 通过 java -jar 命令即可运行应用。

2. Spring Boot 的核心组件

2.1 Spring Boot Starter

  • 提供了一系列依赖描述符,简化了依赖管理。

  • 每个 Starter 都包含一组相关的依赖,开发者只需引入一个 Starter 即可使用相关功能。

2.2 Spring Boot AutoConfigure

  • 自动配置模块,根据类路径上的依赖自动配置 Spring 应用。

2.3 Spring Boot Actuator

  • 提供了生产级别的监控和管理功能。

  • 主要功能包括:

    • 健康检查(/actuator/health)。

    • 应用信息(/actuator/info)。

    • 指标收集(/actuator/metrics)。

    • 环境信息(/actuator/env)。

2.4 Spring Boot CLI

  • 命令行工具,用于快速开发和测试 Spring Boot 应用。

  • 支持 Groovy 脚本,可以快速编写和运行 Spring Boot 应用。

3. Spring Boot 的开发流程

3.1 项目创建

3.2 编写代码

  • 主类使用 @SpringBootApplication 注解,标记为 Spring Boot 应用的入口。

  • 编写 Controller、Service、Repository 等组件。

3.3 运行应用

  • 通过 mvn spring-boot:run 或直接运行主类来启动应用。

  • 应用启动后,内嵌服务器会监听指定端口(默认 8080)。

3.4 打包部署

  • 使用 mvn package 打包成可执行的 JAR 或 WAR 文件。

  • 通过 java -jar 命令运行 JAR 文件,或部署到外部服务器。

4. Spring Boot 的配置文件

4.1 配置文件格式

  • 支持 application.properties 和 application.yml 两种格式。

  • YAML 格式更适合复杂的配置结构。

4.2 多环境配置

  • 通过 application-{profile}.properties 或 application-{profile}.yml 实现不同环境的配置。

  • 例如:

    • application-dev.properties:开发环境配置。

    • application-prod.properties:生产环境配置。

  • 通过 spring.profiles.active 指定激活的环境。

4.3 外部化配置

  • 支持从多种来源加载配置,包括:

    • 命令行参数。

    • 环境变量。

    • 外部配置文件(如 /config/application.properties)。

5. Spring Boot 的数据库集成

5.1 Spring Data JPA

  • 简化了 JPA 的使用,提供了 CRUD 操作的默认实现。

  • 主要注解:

    • @Entity:标记实体类。

    • @Repository:标记数据访问层。

    • @Query:自定义查询。

5.2 MyBatis

  • 支持 SQL 映射,提供了更灵活的 SQL 操作。

  • 通过 @Mapper 注解标记 MyBatis 接口。

5.3 数据库迁移工具

  • 集成 Flyway 或 Liquibase,用于管理数据库版本控制。

6.Spring Boot 的测试

6.1 单元测试

  • 使用 JUnit 和 Mockito 编写单元测试。

6.2 集成测试

  • 使用 @SpringBootTest 注解进行集成测试。

6.3 端到端测试

  • 使用工具如 Selenium 或 RestAssured 进行端到端测试。

7. Spring Boot 的优缺点

7.1 优点

  • 快速开发,减少配置。

  • 内嵌服务器,简化部署。

  • 丰富的生态系统和社区支持。

7.2 缺点

  • 自动配置可能导致不透明性,调试困难。

  • 对于非常复杂的应用,可能需要手动配置。

SpringBoot中注解

1. 核心注解

1.1 @SpringBootApplication

  • 作用:标记主类,表示这是一个 Spring Boot 应用。

  • 组合注解:包含 @Configuration@EnableAutoConfiguration 和 @ComponentScan

@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

1.2 @Configuration

  • 作用:标记一个类为配置类,相当于 Spring 的 XML 配置文件。

@Configuration
public class AppConfig {
    @Bean
    public MyService myService() {
        return new MyService();
    }
}

1.3 @ComponentScan

  • 作用:自动扫描并注册指定包下的组件(如 @Component@Service@Repository 等)。

@ComponentScan(basePackages = "com.example")
public class AppConfig {}

1.4 @EnableAutoConfiguration

  • 作用:启用 Spring Boot 的自动配置机制。

@EnableAutoConfiguration
public class MyApplication {}

2. Web 相关注解

2.1 @RestController

  • 作用:组合了 @Controller 和 @ResponseBody,用于定义 RESTful Web 服务。

@RestController
public class MyController {
    @GetMapping("/hello")
    public String hello() {
        return "Hello, World!";
    }
}

2.2 @RequestMapping

  • 作用:映射 HTTP 请求到处理方法。

@RequestMapping(value = "/api", method = RequestMethod.GET)
public String getData() {
    return "Data";
}

2.3 @GetMapping / @PostMapping / @PutMapping / @DeleteMapping

  • 作用:简化 @RequestMapping 的写法,分别用于处理 GET、POST、PUT、DELETE 请求。

@GetMapping("/users")
public List<User> getUsers() {
    return userService.getAllUsers();
}

2.4 @RequestParam

  • 作用:绑定 HTTP 请求参数到方法参数。

@GetMapping("/user")
public User getUser(@RequestParam("id") Long id) {
    return userService.getUserById(id);
}

2.5 @PathVariable

  • 作用:绑定 URL 路径变量到方法参数。

@GetMapping("/user/{id}")
public User getUser(@PathVariable("id") Long id) {
    return userService.getUserById(id);
}

2.6 @RequestBody

  • 作用:将 HTTP 请求体绑定到方法参数,通常用于接收 JSON 数据。

@PostMapping("/user")
public User createUser(@RequestBody User user) {
    return userService.saveUser(user);
}

2.7 @ResponseBody

  • 作用:将方法返回值直接写入 HTTP 响应体。

@GetMapping("/hello")
@ResponseBody
public String hello() {
    return "Hello, World!";
}

3. 依赖注入相关注解

3.1 @Autowired

  • 作用:自动注入依赖,可以用于字段、构造方法或 Setter 方法。

@Service
public class MyService {
    @Autowired
    private MyRepository myRepository;
}

3.2 @Component

  • 作用:标记一个类为 Spring 组件,由 Spring 容器管理。

@Component
public class MyComponent {}

3.3 @Service

  • 作用:标记一个类为服务层组件。

@Service
public class MyService {}

3.4 @Repository

  • 作用:标记一个类为数据访问层组件,通常用于 DAO 类。

@Repository
public class MyRepository {}

3.5 @Bean

  • 作用:标记一个方法返回的对象为 Spring Bean。

@Configuration
public class AppConfig {
    @Bean
    public MyService myService() {
        return new MyService();
    }
}

4. 配置相关注解

4.1 @Value

  • 作用:注入配置文件中的属性值。

@Value("${app.name}")
private String appName;

4.2 @ConfigurationProperties

  • 作用:将配置文件中的属性绑定到一个 Java 对象。

@ConfigurationProperties(prefix = "app")
public class AppConfig {
    private String name;
    private String version;
    // getters and setters
}

4.3 @PropertySource

  • 作用:指定自定义的配置文件。

@Configuration
@PropertySource("classpath:custom.properties")
public class CustomConfig {}

5. 测试相关注解

5.1 @SpringBootTest

  • 作用:用于集成测试,加载完整的 Spring 应用上下文。

@SpringBootTest
public class MyIntegrationTest {}

5.2 @MockBean

  • 作用:在测试中模拟一个 Spring Bean。

@SpringBootTest
public class MyServiceTest {
    @MockBean
    private MyRepository myRepository;
}

5.3 @Test

  • 作用:标记一个方法为测试方法。

@Test
public void testMethod() {
    // 测试逻辑
}

6. AOP 相关注解

6.1 @Aspect

  • 作用:标记一个类为切面。

@Before("execution(* com.example.service.*.*(..))")
public void beforeAdvice() {
    System.out.println("Before method execution");
}

6.2 @Before / @After / @Around

  • 作用:定义切面通知,分别在方法执行前、执行后或环绕执行。

@Before("execution(* com.example.service.*.*(..))")
public void beforeAdvice() {
    System.out.println("Before method execution");
}

7. 事务管理相关注解

7.1 @Transactional

  • 作用:标记一个方法或类需要事务管理。

@Transactional
public void updateUser(User user) {
    userRepository.save(user);
}

8. 缓存相关注解

8.1 @Cacheable

  • 作用:标记方法的返回值需要缓存。

@Cacheable("users")
public User getUserById(Long id) {
    return userRepository.findById(id);
}

8.2 @CacheEvict

  • 作用:清除缓存。

@CacheEvict(value = "users", key = "#id")
public void deleteUser(Long id) {
    userRepository.deleteById(id);
}

9. 定时任务相关注解

9.1 @Scheduled

  • 作用:标记一个方法为定时任务。

@Scheduled(fixedRate = 5000)
public void runTask() {
    System.out.println("Task executed");
}

10. 国际化相关注解

10.1 @MessageSource

  • 作用:注入消息源,用于国际化。

@Autowired
private MessageSource messageSource;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值