Spring初始化Ioc容器的三种方法

本文详细介绍了Spring框架中ApplicationContext的使用方法,包括通过ClassPathXmlApplicationContext加载配置文件、通过资源路径加载XML配置文件以及使用ClassPathResource加载配置文件,并演示了如何通过这些方式获取并操作Bean实例。

1、

ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
  Student stu = (Student)context.getBean("student");
  stu.setEmail("abc@126.com");
  
2、  
  String filePath = SpringAction.class.getResource("/").getPath();
  filePath = filePath.substring(1);
  Resource resource = new FileSystemResource(filePath+"applicationContext.xml");
  BeanFactory factory = new XmlBeanFactory(resource);
  Student stu1 = (Student)factory.getBean("student");
  stu1.setEmail("abc@163.com");
  3、
  ClassPathResource cr = new ClassPathResource("applicationContext.xml");
  BeanFactory beans = new XmlBeanFactory(cr);
  Student stu2 = (Student)beans.getBean("student");
  stu2.setEmail("abc@qq.com");

Spring IOC(Inversion of Control,控制反转)是 Spring 框架的核心功能之一,通过依赖注入(Dependency Injection)实现对象的创建和管理,其容器初始化过程、方法及原理如下: ### 初始化过程 IOC 的整个初始化流程可以概要地分为三大步骤:定位,加载,注册 [^1]。 - **定位**:寻找需要初始化哪些 Bean。这一步也被称作 BeanDefinition 的 Resource 定位,即确定要从哪些资源(如 XML 文件、Java 配置类等)中加载 Bean 的定义信息 [^1][^2]。 - **加载**:将寻找到需要初始化的 Bean 进行解析封装。也就是对资源中定义的 BeanDefinition 进行解析和载入,将资源中的配置信息转换为容器内部可以使用的 BeanDefinition 对象 [^1][^2]。 - **注册**:这一步是将第二步加载后的 Bean 放入 IOC 容器,也就是放入 Map 集合之中,即完成 BeanDefinition 在 IoC 容器的注册,使得容器可以根据这些注册信息来创建和管理 Bean [^1][^2]。 在准备阶段,Spring 首先设置容器状态为“激活”,并初始化环境变量。环境变量是 Spring 应用的全局配置,包含了系统属性、环境变量和配置文件中的属性值,为后续的资源解析和 Bean 定义提供了基础。此外,Spring 还会准备早期事件监听器,确保在容器尚未完全初始化时也能处理特定事件 [^4]。 ### 初始化方法 以下提供一些代码示例来说明初始化方法: #### 基于 XML 配置 ```xml <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="exampleBean" class="com.example.ExampleBean"> <!-- 配置属性 --> </bean> </beans> ``` 在 Java 代码中使用: ```java import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Main { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); // 获取 Bean ExampleBean exampleBean = (ExampleBean) context.getBean("exampleBean"); } } ``` #### 基于 Java 配置 ```java import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class AppConfig { @Bean public ExampleBean exampleBean() { return new ExampleBean(); } } ``` 在 Java 代码中使用: ```java import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class Main { public static void main(String[] args) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class); // 获取 Bean ExampleBean exampleBean = context.getBean(ExampleBean.class); } } ``` ### 初始化原理 Spring IOC 容器的核心是一个 BeanFactory 或其子类,如 ApplicationContext。其初始化原理基于控制反转和依赖注入的思想,将对象的创建和管理从代码中解耦出来,交给容器来完成。 在容器初始化过程中,通过定位、加载和注册 BeanDefinition,容器掌握了所有 Bean 的定义信息。当需要使用某个 Bean 时,容器根据 BeanDefinition 来创建和配置 Bean 实例,并将其提供给调用者。同时,Spring 还提供了一系列的扩展点,如 BeanFactoryPostProcessor 控制 “造什么 Bean”,BeanPostProcessor 控制 “怎么造 Bean”,生命周期回调控制 “Bean 初始化做什么”,这些扩展点可以让开发者在容器初始化的不同阶段进行自定义操作 [^3][^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值