02.5、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 应用的入口注解,它组合了三个注解:
组合注解:
- @Configuration:标识配置类
- @EnableAutoConfiguration:启用自动配置
- @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 } }
区别对比
| 注解 | 用途 | 返回值 |
|---|---|---|
| @Controller | MVC 控制器 | 视图名称 |
| @RestController | RESTful API | JSON/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> { }
官方资源
- Spring 注解文档:https://docs.spring.io/spring-framework/reference/core/beans/annotation-config.html
- Spring Boot 注解:https://docs.spring.io/spring-boot/docs/current/reference/html/using.html#using.structuring-your-code
本节小结
在本节中,我们学习了:
第一个是 @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 如何自动配置应用。