Spring系列框架常用注解详解(Spring/Spring Boot/Spring Cloud)
一、Spring核心注解
1. @Component
作用:标记类为Spring组件,会被自动扫描到IoC容器
适用场景:通用组件类
@Component
public class UserService {
// 业务逻辑
}
常见异常:
NoSuchBeanDefinitionException
(未扫描到组件)
处理:检查包路径是否在@ComponentScan范围内
2. @Autowired
作用:自动注入依赖
适用场景:需要依赖注入的字段/构造器/方法
@Service
public class OrderService {
@Autowired
private UserService userService;
}
常见异常:
NoSuchBeanDefinitionException
(未找到对应Bean)
NoUniqueBeanDefinitionException
(存在多个同类型Bean)
处理:结合@Qualifier指定Bean名称
3. @Controller/@Service/@Repository
作用:组件分类注解(语义化标记)
- @Controller:Web层组件
- @Service:业务层组件
- @Repository:数据访问层组件
@Controller
public class UserController {
// 处理HTTP请求
}
4. @Configuration + @Bean
作用:声明配置类和Bean定义
适用场景:第三方库集成、复杂对象创建
@Configuration
public class AppConfig {
@Bean
public DataSource dataSource() {
return new HikariDataSource();
}
}
常见问题:
Bean名称冲突(默认使用方法名作为Bean名称)
二、Spring Boot核心注解
1. @SpringBootApplication
作用:启动类注解(组合注解,包含@Configuration、@ComponentScan等)
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
2. @RestController
作用:组合@Controller和@ResponseBody,直接返回JSON
@RestController
@RequestMapping("/api/users")
public class UserController {
@GetMapping("/{id}")
public User getUser(@PathVariable Long id) {
return userService.findUser(id);
}
}
3. @Value
作用:注入配置文件中的值
application.properties:
app.max-size=100
使用示例:
@Service
public class FileService {
@Value("${app.max-size}")
private int maxSize;
}
常见问题:
IllegalArgumentException
(值不存在或类型不匹配)
处理:添加默认值:@Value("${app.max-size:50}")
三、Spring Cloud常用注解
1. @EnableEurekaServer
作用:启用Eureka注册中心
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
2. @EnableDiscoveryClient
作用:启用服务发现(注册到注册中心)
@SpringBootApplication
@EnableDiscoveryClient
public class UserServiceApplication {
public static void main(String[] args) {
SpringApplication.run(UserServiceApplication.class, args);
}
}
3. @FeignClient
作用:声明Feign客户端(服务间调用)
@FeignClient(name = "order-service")
public interface OrderClient {
@GetMapping("/orders/{userId}")
List<Order> getOrders(@PathVariable Long userId);
}
常见异常:
FeignException
(服务不可用或配置错误)
处理:检查服务名称、网络连通性、超时设置
四、常见问题汇总
1. Bean注入失败
现象:NoSuchBeanDefinitionException
解决方案:
- 检查类是否添加组件注解
- 确认包路径是否被扫描
- 检查是否存在多个同类型Bean(使用@Qualifier)
2. 配置读取失败
现象:Could not resolve placeholder
处理步骤:
- 检查application.properties/yml文件名称
- 确认属性名拼写正确
- 检查@ConfigurationProperties前缀配置
3. 服务注册失败
现象:服务未出现在注册中心
排查方向:
- 检查@EnableDiscoveryClient注解
- 验证注册中心地址配置
- 查看客户端与服务端版本兼容性