[db:标题]
摘要:Spring--IOC容器 Spring 是一个基于 Java 平台的开源全栈应用程序框架,也是一个控制反转(IoC)容器实现。 Spring IoC 容器即 Spring 框架中负责管理“Bean”(由容器实例化、配置并组装的普通 POJ
Spring--IOC容器
Spring 是一个基于 Java 平台的开源全栈应用程序框架,也是一个控制反转(IoC)容器实现。
Spring IoC 容器即 Spring 框架中负责管理“Bean”(由容器实例化、配置并组装的普通 POJO 对象)的核心组件。容器读取配置元数据(XML、注解或 Java 配置类),解析 Bean 定义,然后在启动或按需时实例化 Bean,完成依赖注入,并负责 Bean 的整个生命周期管理。
本文章示例代码见该仓库:【spring】中的“spring”模块。
仓库地址:https://gitee.com/quercus-sp204/sourcecode-and-demos
1.相关概念
IOC: Inversion of control 【控制反转】
控制反转是一种设计原则,其核心思想是:将程序中对象的创建、配置和生命周期管理的控制权,从应用代码“反转”交给外部框架或容器来负责。在传统的程序设计中,业务逻辑代码主动调用库或框架完成通用功能;而在 IoC 中,则是框架或容器主动调用开发者编写的代码,实现“控制权”反转,此外呢,IoC 不是一种技术,而是一种思想。
降低组件间的耦合度,提升系统的可维护性和扩展性。例如,传统开发中Service层直接依赖Dao层的具体实现,而IoC通过容器动态注入依赖,使两者解耦。
DI:Dependency Injection 【依赖注入】
依赖注入是 IoC 最常见的一种实现方式。在 DI 模式下,对象只需声明它所依赖的其他对象(通过构造器、属性或工厂方法),由 IoC 容器在实例化时自动“注入”这些依赖,从而实现组件间的松耦合和可测试性提升。
在Spring中,我们可以通过构造器注入、Setter方法注入或字段注入(如@Autowired)。
// 构造器注入
@Component
public class UserService {
private final UserDao userDao;
@Autowired
public UserService(UserDao userDao) {
this.userDao = userDao;
}
}
2.核心类介绍
我们都知道,spring可以从xml配置文件中解析bean的定义,同时也可以结合相关注解(例如@Configuration, @Bean等)来定义相关bean。最经典的就是这两种了,下面我们就基于这两种类型,来介绍一下相关的核心类。
①基本的
Bean工厂相关接口以及context
上面的类间关系图我们需要了解的是红色框框中的三个,BeanFactory、ApplicationEventPublisher、ApplicationContext。
BeanFactory : IOC容器的核心接口,定义了基础功能(如getBean()、containsBean()),可以看到,BeanFactory是一个顶级接口,定义了比较常用的getBean方法。
public interface BeanFactory {
String FACTORY_BEAN_PREFIX = "&";
Object getBean(String name) throws BeansException;
<T> T getBean(String name, Class<T> requiredType) throws BeansException;
<T> T getBean(Class<T> requiredType) throws BeansException;
boolean containsBean(String name);
.....
}
ApplicationContext:BeanFactory的扩展接口,提供高级功能(如国际化、事件发布、AOP支持)
用于为应用程序提供配置的中央接口。这在应用程序运行时是只读的,但如果实现支持,则可以重新加载。ApplicationContext提供:
继承自 ListableBeanFactory用于访问应用程序组件的 Bean 工厂方法。
继承自ResourceLoader 接口用以通用方式加载文件资源的能力。
继承自 ApplicationEventPublisher 接口能够将事件发布到已注册的侦听器。
继承自 MessageSource 接口 能够解析消息的能力,支持国际化。
