spring IOC and DI
一、IOC和DI的区别:
IOC:对象的管理权由spring容器掌握(管理权限包括:对象的建立时间点、建立方式以及对象属性的管理);
DI:spring操做对象属性的时使用的方式就是DI技术spring
二、DI方式:spring操做对象属性的时间点通常都是在对象建立的时候,操做的方式是可配置的,主要有4种方式:no(default)、byName、byType、constructor。
no方式:这是spring的默认方式,这种方式spring不会对对象的属性作任何的操做,除非配置了<property>属性,不然spring不会自动的在当前context去找须要的值。
byName方式:spring会在当前的context找到和对象属性名称相同的值进行注入,若是找到的值的类型和属性的值类型不一致就会报:"Cannot convert value of type"错误。
byType方式:spring会在当前的context找到和对象属性类型相同的值进行注入,若是找到值不止一个就会报"No unique bean of type"错误。
constructor方式:这种方式比较特殊,这是一个显示的依赖关系,对象必须有有参构造方法,spring会根据参数的名称去context找对应的值进行注入,改方式不能被子类继承。
三、IOC用法:
3.一、建立子类对象,给其指定父类对象,若是不指定那么父类会从新实例化,不会再当前容器中查找。
<bean name="student" class="com.xxw.pojo.Student" parent="persion">
<property name="name" value="this a student"/>
</bean>
<bean name="persion" class="com.xxw.pojo.Persion" autowire="byName" >
<property name="persionName" value="this is two persion"/>
</bean>
其余两种:能够经过静态工厂方法或者实例工厂的方法this
四、spring元数据配置中的p标签和c标签
使用p标签须要加入xml:xmlns:p="http://www.springframework.org/schema/p"
<bean name="animal" class="com.xxw.pojo.Cat" p:name="this is cat" />
等价于:
<bean name="animal" class="com.xxw.pojo.Cat">
<property name="name" value="this is cat"/>
</bean>
使用c标签须要加入xml: xmlns:c="http://www.springframework.org/schema/c"
这个标签的使用相似于:<constructor-arg></constructor-arg>标签xml