Skip to content

Spring IoC 控制反转

TIP

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

什么是 IoC?

传统方式:对象自己创建依赖对象

java
public class UserService {
    private UserDao userDao = new UserDao(); // 主动创建
}

IoC 方式:由容器注入依赖

java
public class UserService {
    @Autowired
    private UserDao userDao; // 由容器注入
}

IoC 容器

Spring 通过 ApplicationContext 管理 Bean:

java
// 加载配置文件创建容器
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

// 加载配置类创建容器
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);

// 从容器中获取 Bean
UserService userService = context.getBean(UserService.class);

XML 配置方式

xml
<!-- applicationContext.xml -->
<beans>
    <bean id="userDao" class="com.example.dao.UserDaoImpl"/>

    <bean id="userService" class="com.example.service.UserService">
        <property name="userDao" ref="userDao"/>
    </bean>
</beans>

注解配置方式(推荐)

java
@Component
public class UserDaoImpl implements UserDao {
    // ...
}

@Service
public class UserService {
    @Autowired
    private UserDao userDao;
}

@Configuration
@ComponentScan("com.example")
public class AppConfig {
    // 配置类,自动扫描包路径
}

BeanFactory vs ApplicationContext

区别BeanFactoryApplicationContext
延迟加载支持默认预加载
事件机制支持
国际化支持
AOP 支持需额外配置原生支持

TIP

实际开发中通常使用 ApplicationContext,它在 BeanFactory 基础上扩展了更多企业级功能。