SpringBoot开发中的关键知识点详解

SpringBoot开发中的关键知识点详解

一、SpringBoot核心特性

1. 自动配置(Auto-Configuration)SpringBoot的自动配置是其最强大的特性之一,它通过以下方式工作: • 基于类路径上的jar包依赖自动配置Spring应用 • 使用@EnableAutoConfiguration注解开启 • 通过spring-boot-autoconfigurejar中的META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件定义配置类

代码语言:javascript代码运行次数:0运行复制@SpringBootApplication // 包含@EnableAutoConfiguration

public class MyApp {

public static void main(String[] args) {

SpringApplication.run(MyApp.class, args);

}

}2. 起步依赖(Starter Dependencies)SpringBoot提供了一系列"starter"依赖,简化了依赖管理: • spring-boot-starter-web - 用于构建web应用 • spring-boot-starter-data-jpa - 用于JPA和Hibernate • spring-boot-starter-test - 用于测试

代码语言:javascript代码运行次数:0运行复制

org.springframework.boot

spring-boot-starter-web

二、SpringBoot应用结构1. 主应用类主应用类通常放在根包下,包含main方法:

代码语言:javascript代码运行次数:0运行复制@SpringBootApplication

public class Application {

public static void main(String[] args) {

SpringApplication.run(Application.class, args);

}

}2. 配置管理SpringBoot支持多种配置方式:

application.properties或application.yml环境变量命令行参数代码语言:javascript代码运行次数:0运行复制# application.yml示例

server:

port: 8081

spring:

datasource:

url: jdbc:mysql://localhost:3306/mydb

username: root

password: password三、Web开发关键点1. REST控制器代码语言:javascript代码运行次数:0运行复制@RestController

@RequestMapping("/api/users")

public class UserController {

@Autowired

private UserService userService;

@GetMapping

public List getAllUsers() {

return userService.findAll();

}

@PostMapping

public User createUser(@RequestBody User user) {

return userService.save(user);

}

}2. 异常处理全局异常处理示例:

代码语言:javascript代码运行次数:0运行复制@ControllerAdvice

public class GlobalExceptionHandler {

@ExceptionHandler(ResourceNotFoundException.class)

public ResponseEntity resourceNotFoundException(ResourceNotFoundException ex) {

ErrorDetails errorDetails = new ErrorDetails(new Date(), ex.getMessage());

return new ResponseEntity<>(errorDetails, HttpStatus.NOT_FOUND);

}

}四、数据访问1. Spring Data JPA代码语言:javascript代码运行次数:0运行复制public interface UserRepository extends JpaRepository {

List findByLastName(String lastName);

@Query("SELECT u FROM User u WHERE u.email = ?1")

User findByEmailAddress(String emailAddress);

}2. 事务管理代码语言:javascript代码运行次数:0运行复制@Service

public class UserService {

@Transactional

public User updateUser(Long id, User userDetails) {

User user = userRepository.findById(id)

.orElseThrow(() -> new ResourceNotFoundException("User not found"));

user.setFirstName(userDetails.getFirstName());

user.setLastName(userDetails.getLastName());

return userRepository.save(user);

}

}五、测试1. 单元测试代码语言:javascript代码运行次数:0运行复制@ExtendWith(MockitoExtension.class)

public class UserServiceTest {

@Mock

private UserRepository userRepository;

@InjectMocks

private UserService userService;

@Test

public void whenValidId_thenUserShouldBeFound() {

Long userId = 1L;

User mockUser = new User(userId, "John", "Doe");

when(userRepository.findById(userId)).thenReturn(Optional.of(mockUser));

User found = userService.getUserById(userId);

assertEquals(userId, found.getId());

}

}2. 集成测试代码语言:javascript代码运行次数:0运行复制@SpringBootTest

@AutoConfigureMockMvc

public class UserControllerIntegrationTest {

@Autowired

private MockMvc mockMvc;

@MockBean

private UserService userService;

@Test

public void shouldReturnUsersList() throws Exception {

List users = Arrays.asList(

new User(1L, "John", "Doe"),

new User(2L, "Jane", "Doe")

);

when(userService.findAll()).thenReturn(users);

mockMvc.perform(get("/api/users"))

.andExpect(status().isOk())

.andExpect(jsonPath("$", hasSize(2)));

}

}六、高级特性1. Actuator监控添加依赖:

代码语言:javascript代码运行次数:0运行复制

org.springframework.boot

spring-boot-starter-actuator

配置示例:

代码语言:javascript代码运行次数:0运行复制management:

endpoints:

web:

exposure:

include: health,info,metrics

endpoint:

health:

show-details: always2. 自定义Starter创建自定义starter步骤:

创建自动配置模块创建starter模块在META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports中注册配置类3. 性能优化建议使用@SpringBootApplication的exclude属性禁用不需要的自动配置懒加载Bean(spring.main.lazy-initialization=true)使用JVM参数调优(-Xms, -Xmx)生产环境关闭DevTools七、部署1. 打包方式代码语言:javascript代码运行次数:0运行复制# 打包为可执行jar

mvn package

# 打包为war(需要修改pom.xml中的packaging)

mvn package -DskipTests2. Docker化示例Dockerfile:

代码语言:javascript代码运行次数:0运行复制FROM openjdk:11-jre-slim

VOLUME /tmp

COPY target/myapp.jar app.jar

ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]结语SpringBoot通过简化配置和提供一系列开箱即用的功能,极大地提高了开发效率。掌握这些关键知识点,可以帮助开发者快速构建健壮的企业级应用。随着SpringBoot生态的不断发展,建议持续关注官方文档和社区动态,以获取最新的最佳实践。

✨ 相关推荐

强制退出recovery(Recovery模式怎么退出)
365平台怎么注册

强制退出recovery(Recovery模式怎么退出)

📅 07-16 👀 7897
2025年中国复印机未来趋势预测分析及投资规划研究建议报告.docx
[资讯]如何用Cool Edit PRO进行内录
h365官方登录平台

[资讯]如何用Cool Edit PRO进行内录

📅 07-03 👀 560