返回
深入剖析 Spring IoC 和 DI,开启你的 Spring 开发之旅
后端
2023-10-12 03:43:12
春风拂面,Spring 之美
Spring 框架如一股清新春风,为 Java 开发领域带来了勃勃生机。它以轻量级、易用性和可扩展性著称,迅速成为众多开发者的不二之选。在 Spring 的怀抱里,你可以轻松创建和管理配置好的对象,设置对象的属性值,并将对象存储在 Spring 容器中。这一切,都离不开 IoC 和 DI 这两大核心概念。
IoC 与 DI:拨开迷雾见天日
IoC:控制反转,让对象掌控自己的命运
IoC,即控制反转,是一种设计思想,它将对象的创建和管理权从应用程序代码中分离出来,交由 Spring 容器来掌控。在 IoC 的世界里,对象不再需要自我创建,也不再需要显式地依赖其他对象,只需将自己的依赖关系声明给 Spring 容器,即可坐享其成。
DI:依赖注入,让对象相亲相爱
DI,即依赖注入,是 IoC 的具体实现方式之一。在 DI 的模式下,Spring 容器会根据对象声明的依赖关系,自动将这些依赖的对象注入到该对象中,从而完成对象的装配。这种方式,极大地简化了对象的创建和配置过程,让开发者可以专注于业务逻辑的实现,而不必为对象的依赖关系而烦恼。
实战演练:Spring IoC 与 DI 的甜蜜约会
1. 导入 Spring 依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.23</version>
</dependency>
2. 创建 Spring 容器
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
3. 编写配置类
@Configuration
public class AppConfig {
@Bean
public UserService userService() {
return new UserServiceImpl();
}
@Bean
public UserRepository userRepository() {
return new UserRepositoryImpl();
}
}
4. 编写 Service 类
public interface UserService {
List<User> getAllUsers();
}
5. 编写 Service 实现类
public class UserServiceImpl implements UserService {
private UserRepository userRepository;
public UserServiceImpl(UserRepository userRepository) {
this.userRepository = userRepository;
}
@Override
public List<User> getAllUsers() {
return userRepository.findAll();
}
}
6. 编写 Repository 类
public interface UserRepository {
List<User> findAll();
}
7. 编写 Repository 实现类
public class UserRepositoryImpl implements UserRepository {
@Override
public List<User> findAll() {
// 假设从数据库中查询到了所有用户
return Arrays.asList(new User(1L, "John Doe"), new User(2L, "Jane Doe"));
}
}
8. 运行程序,尽情享受
UserService userService = context.getBean(UserService.class);
List<User> users = userService.getAllUsers();
for (User user : users) {
System.out.println(user.getName());
}
结语:春暖花开,携手共进
Spring IoC 和 DI,犹如两颗璀璨的明珠,为 Java 开发的世界增添了无限光彩。它们以其简洁性和灵活性,让开发人员可以轻松创建和管理应用程序,而无需为对象的创建和依赖关系而烦恼。如果您正在寻找一种强大的框架来构建应用程序,那么 Spring 绝对是您的不二之选。