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
| 区别 | BeanFactory | ApplicationContext |
|---|---|---|
| 延迟加载 | 支持 | 默认预加载 |
| 事件机制 | 无 | 支持 |
| 国际化 | 无 | 支持 |
| AOP 支持 | 需额外配置 | 原生支持 |
TIP
实际开发中通常使用 ApplicationContext,它在 BeanFactory 基础上扩展了更多企业级功能。