依赖注入的注解
在Spring中,依赖注入的注解主要有以下几种:
- 构造器注入相关:
@Autowired // 最常用的构造器注入注解@Inject // JSR-330标准注解,功能与@Autowired类似
- 字段注入相关:
@Autowired // 字段注入@Resource // JSR-250标准注解,按名称注入@Inject // JSR-330标准注解,按类型注入@Value // 用于注入基本类型和String类型的值
- Setter方法注入相关:
@Autowired // setter方法注入@Resource // setter方法注入@Inject // setter方法注入
- 特殊用途的注入注解:
@Qualifier // 配合@Autowired使用,指定具体的Bean@Primary // 当有多个同类型Bean时,优先使用被@Primary标记的@Lazy // 延迟注入,只有在第一次使用时才创建Bean
- 条件注入相关:
@ConditionalOnBean // 当存在某个Bean时才注入@ConditionalOnMissingBean // 当不存在某个Bean时才注入@ConditionalOnProperty // 根据配置属性决定是否注入
- Lombok提供的简化注入:
@RequiredArgsConstructor // 自动生成包含final字段的构造器@AllArgsConstructor // 自动生成包含所有字段的构造器
使用示例:
@Componentpublic class Example {// 1. 构造器注入@Autowiredpublic Example(ServiceA serviceA, ServiceB serviceB) {this.serviceA = serviceA;this.serviceB = serviceB;}// 2. 字段注入@Autowiredprivate ServiceA serviceA;@Resource(name = "serviceB")private ServiceB serviceB;@Value("${app.name}")private String appName;// 3. Setter注入@Autowiredpublic void setServiceA(ServiceA serviceA) {this.serviceA = serviceA;}// 4. 使用@Qualifier指定具体Bean@Autowired@Qualifier("specificService")private Service specificService;}
最佳实践建议:
- 优先使用构造器注入
- 避免使用字段注入
- 使用 @RequiredArgsConstructor 简化构造器注入
- 需要按名称注入时使用 @Resource
- 需要注入配置值时使用 @Value
- 有多个同类型Bean时使用 @Qualifier 或 @Primary