@Autowired详解

210 阅读2分钟

引言

@Autowired 是 Spring 框架中的注解之一,用于实现依赖注入(DI)功能。依赖注入是一种设计模式,它可以在运行时将依赖关系动态地注入到对象中,从而提高代码的可维护性和可测试性。

怎么用

@Autowired 注解可以用于属性、方法和构造函数上,它们分别表示不同的注入方式:

作用于属性上

在属性上使用 @Autowired 注解,表示 Spring 容器会自动注入该属性所需的实例。这种方式是最常用的方式,例如:

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserRepository userRepository;

    // ...
}

在这个示例中,Spring 会自动将 UserRepository 类型的实例注入到 userServiceImpl 对象的 userRepository 属性中。

作用于普通方法上

在方法上使用 @Autowired 注解,表示 Spring 容器会自动调用该方法,并将所需的实例作为参数传递给该方法。例如:

@Service
public class UserServiceImpl implements UserService {

    private UserRepository userRepository;

    @Autowired
    public void setUserRepository(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    // ...
}

在这个示例中,Spring 容器会自动调用 setUserRepository 方法,并将 UserRepository 类型的实例作为参数传递给该方法。

作用于构造方法上

在构造方法上使用 @Autowired 注解,表示 Spring 容器会自动实例化该类,并将所需的实例作为参数传递给该构造方法。例如:

@Service
public class UserServiceImpl implements UserService {

    private UserRepository userRepository;

    @Autowired
    public UserServiceImpl(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    // ...
}

注意:

当一个类中既有无参构造,又有有参构造,会优先使用@Autowired标记的(Spring中默认使用无参构造)

总结

当我们在使用 Spring 进行开发时,通常会使用依赖注入来管理对象之间的依赖关系,而 @Autowired 注解就是其中最常用的一种方式。

总的来说,@Autowired 注解的作用是:

  1. 将 Spring 容器中的 bean 注入到使用了 @Autowired 注解的类中,从而实现对象之间的依赖注入。

  2. 可以使用 @Autowired 注解标注在类的属性、构造函数或方法上,表示不同的注入方式,包括:

    1. 在属性上使用 @Autowired 注解,表示 Spring 容器会自动注入该属性所需的实例。
    2. 在构造函数上使用 @Autowired 注解,表示 Spring 容器会自动实例化该类,并将所需的实例作为参数传递给该构造函数。
    3. 在普通方法上使用 @Autowired 注解,表示 Spring 容器会自动调用该方法,并将所需的实例作为参数传递给该方法。
  3. 在使用 @Autowired 注解时,需要将类标记为 Spring 管理的 bean,通常使用 @Component、@Service、@Repository、@Controller 等注解来实现。