前言
Spring IOC容器是Spring框架的核心组件之一,它是一个容器,负责管理应用程序中的对象(即Bean)。在Spring IOC容器中,对象的创建、配置、管理和依赖注入都是由容器来完成的,而不是由程序员手动创建和管理。这使得应用程序更加松散耦合,易于维护和测试。
第一部分:Spring IOC容器的概念和原理
1.1 什么是IOC容器?
IOC容器是一个Java对象,它负责管理Bean对象的生命周期,即创建、配置、初始化、注入和销毁等过程。
IOC容器中存放的是一个个数据层和业务层的bean对象。
1.2 什么是依赖注入?
依赖注入是IOC容器实现的核心机制,它使得容器可以自动将对象之间的依赖关系注入到对象中。例如,在一个Web应用程序中,一个Controller对象可能需要一个Service对象来处理业务逻辑。通过依赖注入,容器会自动创建和注入Service对象,从而使得Controller可以使用Service对象的功能。
1.3 什么是控制反转?
控制反转是指,程序员不再手动创建和管理对象之间的依赖关系,而是将这个责任交给容器来完成。这种反转控制的设计思想可以减少对象之间的耦合,提高代码的可维护性和可测试性。
1.4 IOC容器的生命周期
IOC容器的生命周期包括以下几个阶段:
- 实例化:IOC容器创建一个对象实例,并初始化其属性
- 配置:IOC容器为对象设置属性值,如通过构造函数或Setter方法设置
- 初始化:IOC容器调用对象的初始化方法,如init()方法
- 注入:IOC容器将对象之间的依赖关系注入到对象中
- 使用:IOC容器将对象返回给调用者,使用者开始使用对象
- 销毁:IOC容器在应用程序关闭时销毁对象
1.5 Bean的作用域
Spring IOC容器支持多种Bean作用域,包括以下几种:
- Singleton:默认的作用域,IOC容器只会创建一个实例,并在应用程序关闭时销毁
- Prototype:每次请求都会创建一个新的实例
- Session:在Web应用程序中,每个会话会创建一个新的实例
- Request:在Web应用程序中,每个请求会创建一个新的实例
第二部分:Spring IOC容器的入门案例
1.创建maven项目:
(具体配置maven项目的环境可以随便在csdn或者去B站搜教程,本人看的教程是这个,大家可以参考一下2022版 的IDEA创建一个maven项目(超详细)_无尽的沉默的博客-CSDN博客)
2.pom.xml添加Spring的依赖jar包
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
</dependencies>
3.创建BookService,BookServiceImpl,BookDao和BookDaoImpl四个类
public interface BookDao {
public void save();
}
public class BookDaoImpl implements BookDao {
public void save() {
System.out.println("book dao save ...");
}
}
public interface BookService {
public void save();
}
public class BookServiceImpl implements BookService {
private BookDao bookDao = new BookDaoImpl();
public void save() {
System.out.println("book service save ...");
bookDao.save();
}
}
4.resources下添加spring配置文件,并完成bean的配置
<bean id="bookDao" class="dao.impl.BookDaoImpl"/> <bean id="bookService" class="service.impl.BookServiceImpl"/>
注意事项:bean定义时id属性在同一个上下文中(配置文件)不能重复
5.获取IOC容器
使用 Spring 提供的接口完成 IOC 容器的创建,创建 App 类,编写 main方法(在主方法下接着上文: )public class App { public static void main(String[] args) { //获取IOC容器 ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); } }
6.从容器中获取对象进行方法调用
public class App {
public static void main(String[] args) {
//获取IOC容器
ApplicationContext ctx = new
ClassPathXmlApplicationContext("applicationContext.xml");
// BookDao bookDao = (BookDao) ctx.getBean("bookDao");
// bookDao.save();
BookService bookService = (BookService) ctx.getBean("bookService");
bookService.save();
}