02.5Spring Boot 3核心注解

分类: Spring 6和Spring Boot 3基础

Spring Boot 3 核心注解

注解是 Spring 框架的核心特性之一,它简化了配置和开发。理解 Spring Boot 3 的核心注解,是掌握 Spring Boot 开发的基础。

本节将学习:@SpringBootApplication、@RestController vs @Controller、@Service、@Repository、@Component、@Configuration 与 @Bean,以及 @Autowired 与依赖注入。

@SpringBootApplication

作用

@SpringBootApplication 是 Spring Boot 应用的入口注解,它组合了三个注解:

组合注解:

  1. @Configuration:标识配置类
  2. @EnableAutoConfiguration:启用自动配置
  3. @ComponentScan:组件扫描

使用示例

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

@RestController vs @Controller

@Controller

@Controller 用于标识控制器类,返回视图:

@Controller public class UserController { @GetMapping("/users") public String listUsers(Model model) { model.addAttribute("users", userService.findAll()); return "users"; // 返回视图名称 } }

@RestController

@RestController 组合了 @Controller 和 @ResponseBody,用于 RESTful API:

@RestController @RequestMapping("/api/users") public class UserController { @GetMapping public List<User> listUsers() { return userService.findAll(); // 直接返回JSON } }

区别对比

注解用途返回值
@ControllerMVC 控制器视图名称
@RestControllerRESTful APIJSON/XML

@Service、@Repository、@Component

组件注解层次

@Service

@Service 用于标识业务逻辑层:

@Service public class UserService { private final UserRepository userRepository; public UserService(UserRepository userRepository) { this.userRepository = userRepository; } public List<User> findAll() { return userRepository.findAll(); } }

@Repository

@Repository 用于标识数据访问层:

@Repository public interface UserRepository extends JpaRepository<User, Long> { List<User> findByName(String name); }

@Component

@Component 是通用组件注解:

@Component public class EmailService { public void sendEmail(String to, String subject, String body) { // 发送邮件逻辑 } }

@Configuration 与 @Bean

@Configuration

@Configuration 用于标识配置类:

@Configuration public class AppConfig { @Bean public RestTemplate restTemplate() { return new RestTemplate(); } }

@Bean

@Bean 用于定义 Bean:

@Configuration public class DatabaseConfig { @Bean public DataSource dataSource() { HikariDataSource dataSource = new HikariDataSource(); dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/mydb"); dataSource.setUsername("root"); dataSource.setPassword("password"); return dataSource; } }

@Autowired 与依赖注入

@Autowired

@Autowired 用于自动注入依赖:

注入方式

1. 字段注入(不推荐):

@Service public class UserService { @Autowired private UserRepository userRepository; }

2. 构造器注入(推荐):

@Service public class UserService { private final UserRepository userRepository; public UserService(UserRepository userRepository) { this.userRepository = userRepository; } }

3. Setter 注入:

@Service public class UserService { private UserRepository userRepository; @Autowired public void setUserRepository(UserRepository userRepository) { this.userRepository = userRepository; } }

推荐方式

推荐使用构造器注入:

  • ✅ 不可变依赖
  • ✅ 易于测试
  • ✅ 避免循环依赖
  • ✅ 编译时检查

注解使用最佳实践

分层架构

完整示例

// Controller层 @RestController @RequestMapping("/api/users") public class UserController { private final UserService userService; public UserController(UserService userService) { this.userService = userService; } @GetMapping public List<User> listUsers() { return userService.findAll(); } } // Service层 @Service public class UserService { private final UserRepository userRepository; public UserService(UserRepository userRepository) { this.userRepository = userRepository; } public List<User> findAll() { return userRepository.findAll(); } } // Repository层 @Repository public interface UserRepository extends JpaRepository<User, Long> { }

官方资源

本节小结

在本节中,我们学习了:

第一个是 @SpringBootApplication。 组合了三个注解,是 Spring Boot 应用的入口。

第二个是 @RestController vs @Controller。 @RestController 用于 RESTful API,@Controller 用于 MVC。

第三个是 @Service、@Repository、@Component。 用于标识不同层次的组件。

第四个是 @Configuration 与 @Bean。 用于配置类和定义 Bean。

第五个是 @Autowired 与依赖注入。 推荐使用构造器注入。

这就是 Spring Boot 3 核心注解。掌握这些注解,是 Spring Boot 开发的基础。

在下一节,我们将学习 Spring Boot 3 的自动配置原理,了解 Spring Boot 如何自动配置应用。