Spring-IOC、DI
零、Spring简介
- Spring官网:http://projects.spring.io/spring-framework
- Jar包的下载地址:http://repo.spring.io/release/org/springframework/spring
- Spring框架的特点:
- spring的是一个轻量级的框架(减少侵入性,对容器没有依赖性,无需修改代码)
- spring能整合其他主流框架
一、Spring-IOC控制反转
什么是IOC?
- 把对象的创建、初始化、销毁等工作交给Spring容器来做。
- Spring容器控制对象的生命周期。
- 以前: Person p1 = new Person(); 手动的创建对象
- 现在: Person p1 = Spring容器.get***(); Spring容器来创建
- 说明:通过Spring容器来管理对象更加简单,不用关心对象的创建过程!!
解耦! 用IOC来创建对象
具体步骤
1.先导入Spring相关JAR包
2.创建对象类
3.编辑xml配置文件
二、依赖注入
- 用Set方法给对象赋值
- 一定要有set方法 , 否则会报错
- 用构造函数给对象赋值 , 注意bean中一定要有application.xml文件中配置的属性对应的构造函数
示例:
public class Person { private Student student; private int number; private String str; private List list; private Set set; private Map map; private Properties properties; } <!-- set方式注入 --> <bean id="person" class="domain.Person"> <!-- property属性 name="student" ref="student"引用的名称 --> <!-- 对象要有set方法 如果没有set方法会报错 --> <!-- <property name="student" ref="student"></property> --> <property name="student"> <ref bean="student"/> </property> <!--注入基本类型 --> <property name="number" value="2016"></property> <!--注入String --> <property name="str" value="我是一只小小小小鸟"></property> <!--注入List --> <property name="list" > <list> <value>111</value> <value>想要飞啊飞,飞的更好</value> <ref bean="student"/> </list> </property> <!--注入set --> <property name="set"> <set> <value>111</value> <value>111</value> <value>你是我的优乐美</value> <ref bean="student"/> </set> </property> <!--注入MAP --> <property name="map"> <map> <entry key="1" value="上路英雄"></entry> <entry key="2" value="大野英雄"></entry> <entry key="3" value="中单英雄"></entry> <entry key="4" value="ADC"></entry> <entry key="5" value="辅助"></entry> <entry key="student" value-ref="student"></entry> </map> <!--map的实现有序是LinkedHashMap --> </property> <!--注入propertys --> <property name="properties"> <props> <prop key="p1">你好</prop> <prop key="p2">订单</prop> <prop key="p3">333</prop> </props> </property> </bean> <bean id="student" class="domain.Student"></bean> <!-- 构造函数方式注入 --> <bean id="person" class="domain.Person"> <!--构造方法赋值 index="参数位置" 从0开始 name="" 参数的名称 type="" 参数类型 value="基本类型" ref="引用类型" --> <!-- 测试一个参数的构造器赋值--> <constructor-arg index="0" name="student" ref="student"></constructor-arg> <constructor-arg index="1" name="number" value="100"></constructor-arg> <constructor-arg index="2" name="str" value="刘昱江"></constructor-arg> <constructor-arg name="list"> <list> <value>sss</value> <value>刘昱江</value> </list> </constructor-arg> index和 name配置一个即可 , 但是通常使用index , 因为项目改动时形参名可能会变
三、IOC和DI的意义
- 传统的mvc思想中代码的侵入性特别强,紧耦合,如果想换实现类,只能修改代码完成。所以IOC和DI的出现解决了这个问题。实现代码的松耦合。真正意义上的面向切面编程