📜  Spring-依赖注入(1)

📅  最后修改于: 2023-12-03 14:47:34.390000             🧑  作者: Mango

Spring 依赖注入

什么是依赖注入

依赖注入(Dependency Injection)是一种设计模式,目的是降低程序组件之间的耦合度。通过依赖注入,程序组件之间不再直接依赖其他组件,而是通过依赖注入容器来实现对其他组件的依赖。

依赖注入有以下几个优点:

  • 降低组件之间的耦合度,各组件之间更加独立。
  • 便于组件的测试,通过注入测试用的组件,而不是原有的组件。
  • 方便替换组件,通过更改注入的组件,而不是更改代码。
Spring 中的依赖注入

Spring 是一个轻量级的 Java 开发框架,它提供了依赖注入的实现。Spring 中的依赖注入是通过将对象之间的依赖关系交给 Spring 容器来管理,Spring 容器会根据配置将依赖注入到需要依赖的对象中。

Spring 为依赖注入提供了两种方式:构造方法注入和属性注入。

构造方法注入

构造方法注入是通过构造方法来注入依赖的对象。在 Spring 中,可以通过在类的构造方法上添加 @Autowired 注解来实现构造方法注入。

@Component
public class UserServiceImpl implements UserService {

    private final UserRepository userRepository;

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

    //...
}

上面的代码中,UserServiceImpl 类的构造方法上添加了 @Autowired 注解,Spring 会自动将 UserRepository 注入到构造方法中的 userRepository 参数中。

属性注入

属性注入是通过类的属性来注入依赖的对象。在 Spring 中,可以通过在属性上添加 @Autowired 注解来实现属性注入。

@Component
public class UserServiceImpl implements UserService {

    @Autowired
    private UserRepository userRepository;

    //...
}

上面的代码中,UserServiceImpl 类的 userRepository 属性上添加了 @Autowired 注解,Spring 会自动将 UserRepository 注入到属性中。

配置文件中的依赖注入

在 Spring 中,依赖注入可以通过 XML 和注解两种方式来配置。下面是通过 XML 配置的示例:

<beans>
  <bean id="userRepository"
        class="com.example.UserRepositoryImpl" />

  <bean id="userService"
        class="com.example.UserServiceImpl">
    <constructor-arg ref="userRepository" />
  </bean>
</beans>

上面的配置中,首先定义了一个 userRepository 对象,然后在 userService 对象的构造方法中注入了 userRepository

自动装配

除了以上的两种方式以外,Spring 还提供了自动装配的方式来实现依赖注入。通过在类上添加 @Component 注解,可以将类注册到 Spring 容器中,然后在其他需要依赖该类的地方添加 @Autowired 注解。

@Component
public class UserServiceImpl implements UserService {

    @Autowired
    private UserRepository userRepository;

    //...
}

@Component
public class UserController {

    @Autowired
    private UserService userService;

    //...
}

上面的代码中,UserServiceImpl 类和 UserController 类都添加了 @Component 注解,Spring 会自动将它们注册到容器中。在 UserController 类中需要依赖 UserService 类,因此在 userService 属性上添加了 @Autowired 注解,Spring 会自动将 UserServiceImpl 类注入到属性中。

总结

依赖注入是一种降低程序组件之间耦合度的方式,Spring 提供了依赖注入的实现。通过构造方法注入、属性注入和 XML 配置等方式,可以将依赖关系交给 Spring 容器来管理。除此之外,Spring 还提供了自动装配的方式来实现依赖注入。