通过@Autowired 注入参数
在Spring中,通过@Autowired
注解实现构造方法参数注入的步骤如下:
添加构造方法:在类中定义需要注入参数的有参构造方法。
使用
@Autowired
注解:在构造方法上添加@Autowired
,告知Spring使用该构造方法进行依赖注入。若类中仅有一个构造方法,可省略该注解(Spring 4.3+支持)。确保参数Bean存在:构造方法中的每个参数类型必须在Spring容器中存在对应的Bean。
处理多Bean冲突:若存在多个同类型Bean,使用
@Qualifier
指定具体Bean名称。
示例代码
基本使用
@Service
public class UserService {
private final UserRepository userRepository;
// Spring 4.3+ 可省略 @Autowired(仅有一个构造方法时)
@Autowired
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
}
多参数注入
@Service
public class OrderService {
private final OrderRepository orderRepo;
private final PaymentService paymentService;
@Autowired
public OrderService(OrderRepository orderRepo, PaymentService paymentService) {
this.orderRepo = orderRepo;
this.paymentService = paymentService;
}
}
使用@Qualifier
解决歧义
@Service
public class AuthService {
private final UserRepository dbUserRepo;
@Autowired
public AuthService(@Qualifier("jdbcUserRepository") UserRepository userRepo) {
this.dbUserRepo = userRepo;
}
}
// 实现类标记@Qualifier
@Repository
@Qualifier("jdbcUserRepository")
public class JdbcUserRepository implements UserRepository {
// 实现代码
}
关键点总结
自动选择构造方法:若存在多个构造方法,需用
@Autowired
明确指定使用哪一个。参数匹配规则:默认按类型匹配,需结合
@Qualifier
按名称匹配解决冲突。版本特性:Spring 4.3+ 支持单构造方法自动注入,无需显式注解。
强依赖保证:构造器注入确保对象初始化时所有依赖就绪,提升组件不变性。
通过以上方式,Spring能够在实例化Bean时,自动通过构造方法注入所需的依赖参数,保证Bean的正确初始化。