通过@Autowired 注入参数

3 5~7 min

在Spring中,通过@Autowired注解实现构造方法参数注入的步骤如下:

  1. 添加构造方法:在类中定义需要注入参数的有参构造方法。

  2. 使用@Autowired注解:在构造方法上添加@Autowired,告知Spring使用该构造方法进行依赖注入。若类中仅有一个构造方法,可省略该注解(Spring 4.3+支持)。

  3. 确保参数Bean存在:构造方法中的每个参数类型必须在Spring容器中存在对应的Bean。

  4. 处理多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的正确初始化。