全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-18 8 分钟 ✍️ juanwangdev

IoC容器

IoC(Inversion of Control,控制反转)是Spring框架的核心思想,将对象的创建和管理权交给容器。

IoC概念

传统方式(手动创建)

Java
// 传统方式:手动创建对象
UserService userService = new UserService();
OrderService orderService = new OrderService(userService); // 手动传递依赖

IoC方式(容器管理)

Java
// IoC方式:容器负责创建和注入
@Service
public class OrderService {
    @Autowired
    private UserService userService; // 容器自动注入
}

IoC容器类型

BeanFactory(基础容器)

Java
BeanFactory factory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
UserService userService = factory.getBean(UserService.class);

ApplicationContext(高级容器,推荐)

Java
// XML配置
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

// Java配置
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);

// Spring Boot自动创建
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        ApplicationContext context = SpringApplication.run(Application.class, args);
    }
}

两种容器对比

特性BeanFactoryApplicationContext
初始化时机懒加载,getBean时创建预加载,启动时创建所有Bean
国际化支持
事件机制
AOP支持需手动配置自动支持
性能启动快启动稍慢
推荐度⭐⭐⭐⭐⭐⭐⭐

ApplicationContext实现类

实现类配置方式适用场景
ClassPathXmlApplicationContextXML文件传统应用
FileSystemXmlApplicationContextXML文件路径外部配置
AnnotationConfigApplicationContextJava配置纯注解项目
WebApplicationContextWeb应用Web项目

IoC核心功能

1. Bean管理

Java
// 获取Bean
UserService userService = context.getBean(UserService.class);

// 按名称获取
UserService userService = (UserService) context.getBean("userService");

// 按类型获取
UserService userService = context.getBean("userService", UserService.class);

// 获取所有Bean名称
String[] names = context.getBeanDefinitionNames();

2. 依赖注入

Java
@Service
public class OrderService {
    @Autowired
    private UserService userService; // IoC容器自动注入
}

3. 生命周期管理

Java
@Service
public class UserService {
    @PostConstruct
    public void init() {
        System.out.println("Bean初始化");
    }

    @PreDestroy
    public void destroy() {
        System.out.println("Bean销毁");
    }
}

IoC解决的问题

问题传统方式IoC方式
对象创建手动new容器负责
依赖管理手动传递自动注入
对象生命周期手动管理容器管理
对象复用需自行实现单例自动复用

要点总结

  1. IoC全称Inversion of Control,即控制反转
  2. 将对象创建和管理权交给Spring容器
  3. ApplicationContext是推荐的IoC容器实现
  4. ApplicationContext启动时预加载所有Bean
  5. IoC实现了对象解耦,降低了代码复杂度

📝 发现内容有误?点击此处直接编辑

← 上一篇 Bean生命周期
下一篇 → 依赖注入
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库