Spring框架IoC与DI深度解析

需积分: 15 3 下载量 22 浏览量 更新于2024-08-02 收藏 337KB DOC 举报
"这篇Spring学习笔记涵盖了从基础的IoC(控制反转)和DI(依赖注入)概念到Spring对JDBC、Hibernate、Struts1和Struts2的支持。通过具体的XML配置示例,展示了如何配置bean,包括基本注入、属性注入、列表注入、Map注入以及构造方法注入等。" 在Spring框架中,IoC(Inverse of Control)也被称为控制反转,它是将对象的创建和管理交给容器来处理,而不是由对象自身负责。这样可以减少代码间的耦合度,提高系统的灵活性。而DI(Dependency Injection)依赖注入是IoC的一种实现方式,它允许开发者通过配置文件或编程方式,将依赖关系注入到对象中,而不是由对象自行查找或创建依赖。 在给出的XML配置中,我们可以看到Spring如何进行DI: 1. 基本注入:通过`<bean>`标签定义一个对象,并使用`<property>`标签注入属性。例如,创建一个名为"zhangsan"的`Person`对象,设置了"name"和"age"属性。 ```xml <bean id="zhangsan" class="tarena.spring.ioc.Person"> <property name="name" value="张三"/> <property name="age"> <value>18</value> </property> ... </bean> ``` 2. 列表注入:使用`<list>`标签可以注入一个数组或列表。例如,给"car"对象的"tels"属性注入电话号码列表。 ```xml <bean id="car" class="tarena.spring.ioc.Car"> ... <property name="tels"> <list> <value>4948631</value> <value>2645234</value> <value>5674567</value> </list> </property> ... </bean> ``` 3. Map注入:`<map>`标签用于注入Map类型的属性,如"drivers"属性,其中包含了"正驾"和"副驾"两个条目。 ```xml <bean id="car" class="tarena.spring.ioc.Car"> ... <property name="drivers"> <map> <entry key="正驾"> <ref bean="zhangsan"/> </entry> <entry key="副驾"> <bean class="tarena.spring.ioc.Person"> <property name="name" value="李四"/> </bean> </entry> </map> </property> ... </bean> ``` 4. 引用注入:使用`<ref>`标签可以引用已定义的bean,如"car"对象的"driver"属性引用了"zhangsan"对象。 ```xml <bean id="car" class="tarena.spring.ioc.Car"> ... <property name="driver" ref="zhangsan"/> ... </bean> ``` 5. 属性注入:对于Properties类型的属性,可以使用`<props>`标签注入键值对,如"car"对象的"props"属性。 ```xml <bean id="car" class="tarena.spring.ioc.Car"> ... <property name="props"> <props> <prop key="color">Red</prop> <prop key="weight">1.5t</prop> <prop key="brand">BMW</prop> </props> </property> ... </bean> ``` 6. 构造方法注入:通过在`<bean>`标签中指定构造函数参数,可以实现构造方法注入。例如,创建一个名为"wangwu"的bean并传递参数给构造方法。 ```xml <bean id="wangwu" class="tarena.spring.io" ...> ... </bean> ``` 这里没有提供完整的构造方法注入示例,但通常会包含`<constructor-arg>`标签来指定构造方法的参数。 这些配置示例说明了Spring框架如何通过XML配置文件实现对象的实例化、初始化和装配,展示了Spring的灵活性和强大的依赖管理能力。此外,Spring还支持基于注解的配置,使得代码更加简洁。而对于JDBC、Hibernate、Struts1和Struts2的支持,则涉及到Spring的事务管理、数据访问集成、MVC框架集成等高级特性,这些在实际开发中都是十分重要的。