spring 集合类初始化

本文通过一个具体的Spring配置文件示例,展示了如何使用XML来定义Bean并设置其属性,包括简单的值类型、集合类型如List、Map和Set以及Bean之间的引用。
请看以下spring的配置代码:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

<bean id="chinese" class="Bean.collections.Chinese">
<property name="schools">
<list>
<value>小学</value>
<value>中学</value>
<value>大学</value>
</list>
</property>
<property name="health">
<props>
<prop key="血压">正常</prop>
<prop key="身高">178</prop>
</props>
</property>
<property name="scores">
<map>
<entry key="数学">
<value>88</value>
</entry>
<entry key="语文">
<value>99</value>
</entry>
</map>
</property>
<property name="axes">
<set>
<value>字符串斧子</value>
<!-- 用嵌套bean定义属性 -->
<bean class="Bean.collections.WoodAxe"/>
<!-- 引用bean作为属性 -->
<ref local="steelaxe"/>
</set>
</property>
</bean>
<bean id="steelaxe" class="Bean.collections.SteelAxe"></bean>
</beans>
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]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值