Spring Boot 常用注解的分类及简明解释
以下是 Spring Boot 常用注解的分类及简明解释,帮助快速理解和使用:
一、核心注解
-
@SpringBootApplication
- 作用:主类注解,标记 Spring Boot 应用的入口。
- 组合功能:
@SpringBootConfiguration
:标识配置类。@EnableAutoConfiguration
:启用自动配置。@ComponentScan
:扫描当前包及子包的组件。
- 示例:
@SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
-
@EnableAutoConfiguration
- 作用:根据依赖自动配置 Spring 容器(如内嵌 Tomcat、数据库配置等)。
-
@ComponentScan
- 作用:扫描指定包下的组件(如
@Component
,@Service
)。 - 示例:
@ComponentScan("com.example.service")
- 作用:扫描指定包下的组件(如
二、Web 开发注解
-
@RestController
- 作用:组合
@Controller
+@ResponseBody
,返回值直接作为 HTTP 响应体(如 JSON)。 - 示例:
@RestController public class UserController { @GetMapping("/users") public List<User> getAllUsers() { ... } }
- 作用:组合
-
@RequestMapping
- 作用:映射 HTTP 请求到方法,可指定路径和方法类型(GET/POST 等)。
- 衍生注解:
@GetMapping
、@PostMapping
、@PutMapping
、@DeleteMapping
(简化 HTTP 方法映射)。
- 示例:
@PostMapping("/user") public User createUser(@RequestBody User user) { ... }
-
@PathVariable
- 作用:从 URL 路径中提取参数。
- 示例:
@GetMapping("/user/{id}") public User getUser(@PathVariable Long id) { ... }
-
@RequestParam
- 作用:获取 URL 查询参数或表单数据。
- 示例:
@GetMapping("/search") public List<User> search(@RequestParam String name) { ... }
-
@RequestBody
- 作用:将请求体(如 JSON)反序列化为对象。
- 示例:
@PostMapping("/user") public void saveUser(@RequestBody User user) { ... }
三、Bean 管理注解
-
@Component
- 作用:通用组件注解,标记类为 Spring Bean。
- 衍生注解:
@Service
(服务层)、@Repository
(数据层)、@Controller
(控制层)。
-
@Configuration
- 作用:定义配置类,替代 XML 配置文件。
- 示例:
@Configuration public class AppConfig { @Bean public DataSource dataSource() { ... } }
-
@Bean
- 作用:在配置类中定义一个 Bean。
- 示例:
@Bean public RestTemplate restTemplate() { return new RestTemplate(); }
-
@Autowired
- 作用:自动注入依赖的 Bean(按类型匹配)。
- 示例:
@Service public class UserService { @Autowired private UserRepository repository; }
-
@Qualifier
- 作用:按名称指定注入的 Bean(解决多个同类型 Bean 的冲突)。
- 示例:
@Autowired @Qualifier("mysqlDataSource") private DataSource dataSource;
四、属性注入注解
-
@Value
- 作用:注入单个属性值(支持 SpEL 表达式)。
- 示例:
@Value("${app.name}") private String appName;
-
@ConfigurationProperties
- 作用:批量绑定配置文件属性到对象。
- 示例:
@ConfigurationProperties(prefix = "app.datasource") public class DataSourceProperties { private String url; // getters/setters }
五、条件注解
-
@ConditionalOnProperty
- 作用:根据配置属性决定是否加载 Bean。
- 示例:
@ConditionalOnProperty(name = "feature.enabled", havingValue = "true") @Bean public Feature feature() { ... }
-
@ConditionalOnClass/@ConditionalOnMissingClass
- 作用:根据类是否存在决定是否加载 Bean。
六、事务与异步注解
-
@Transactional
- 作用:声明方法需要事务管理。
- 示例:
@Service public class UserService { @Transactional public void updateUser(User user) { ... } }
-
@Async
- 作用:异步执行方法(需启用异步支持)。
- 示例:
@Async public void sendEmailAsync() { ... }
七、测试注解
-
@SpringBootTest
- 作用:启动完整应用上下文进行集成测试。
- 示例:
@SpringBootTest public class UserServiceTest { ... }
-
@MockBean
- 作用:在测试中模拟一个 Bean。
- 示例:
@MockBean private UserRepository mockRepo;
八、其他实用注解
-
@Profile
- 作用:根据环境(如
dev
、prod
)加载 Bean。 - 示例:
@Profile("dev") @Bean public DataSource devDataSource() { ... }
- 作用:根据环境(如
-
@Scheduled
- 作用:定义定时任务。
- 示例:
@Scheduled(cron = "0 0 * * * ?") public void reportDaily() { ... }
总结
- 核心注解:
@SpringBootApplication
是入口,自动配置和组件扫描是核心。 - Web 开发:
@RestController
和@RequestMapping
是构建 RESTful API 的基础。 - Bean 管理:
@Component
、@Service
等注解简化了依赖注入。 - 属性绑定:
@ConfigurationProperties
适合批量配置,@Value
适合单值注入。
根据实际需求选择合适的注解,可大幅提升开发效率!