Spring MVC学习--依赖注入
2013-10-24 18:01
309 查看
一、首先看下概念
依赖注入:曾用名控制反转(Inverse of Control,简称IoC,即一类调用一个接口的实现类,这个实现类由第三方决定)。
现在用名 Dependency Injection,简称DI。
二、依赖注入的几种方式
1、属性注入
通过setXxx()方法注入Bean的属性值或依赖对象。
属性命名规则--属性的前两个字母要么全部大写,要么全部小写,如:iC,aB这样的属性,spring容器启动会报异常。
2、构造函数注入
在Bean实例化的时候,注入属性值,在实例化后可使用。在注入时其中可细分为:
(1、)按类型匹配入参
如:public class Car{
...省略
public Car(string brand,double price){
this.brand = brand;
this.price = price;
}
}
注入的bean文件如下:
<bean id="car" class="com.baobao.ditype.Car">
<constructor-arg type="java.lang.String">
<value>红旗CA72</value>
<constructor-arg>
<constructor-arg type="double">
<value>20000</value>
</constructor-arg>
</bean>
(2、)按索引匹配入参
如:public class Car{
...省略
public Car(string brand,String corp,double price){
this.brand = brand;
this.corp = corp;
this.price = price;
}
}
配置文件如下:
<bean id="car" class="com.baobaotao.ditype.Car">
<--索引从0开始-->
<constructor-arg index="0" value="红旗CA72"/>
<constructor-arg
index="1" value="中国一汽"/>
<constructor-arg
index="2" value="2000"/>
</bean>
(3、)联合使用类型和索引匹配入参
如:public class Car{
...省略
public Car(string brand,String corp,double price){
this.brand = brand;
this.corp = corp;
this.price = price;
}
public Car(string brand,String corp,int maxSpeed){
this.brand = brand;
this.corp = corp;
this.price = price;
}
}
(注:多构造时,单独使用类型注入或索引注入都不能确定为哪个构造赋值,第三个属性值是不同的,因此使用索引加类型联合确定具体的构造函数)
配置文件如下:
<bean id="car" class="com.baobaotao.Car">
<constructor-arg
index="0" type="java.lang.String">
<value>红旗CA72</value>
</constructor>
<constructor-arg
index="1" type="java.lang.String">
<value>中国一汽</value>
</constructor>
<constructor-arg
index="2" type=“int">
<value>200</value>
</constructor>
</bean>
(4、通过自身类型反射匹配入参)
如:
public Boss(String name,Car car,Office office){
this.name=name;
this.car = car;
this.office=office;
}
配置文件如下:
<bean id="boss" class="com.baobaotao.ditype.Boss">
<!--这里没有设置type和index属性-->
<constructor-arg>
<value>John</value>
</constructor-arg>
<constructor-arg>
<ref bean="car"/>
</constructor-arg>
<constructor-arg>
<ref bean="office"/>
</constructor-arg>
</bean>
<bean id="car" class="com.baobaotao.ditype.Car"/>
<bean id="office" class="com.baobaotao.ditype.Office"/>
依赖注入:曾用名控制反转(Inverse of Control,简称IoC,即一类调用一个接口的实现类,这个实现类由第三方决定)。
现在用名 Dependency Injection,简称DI。
二、依赖注入的几种方式
1、属性注入
通过setXxx()方法注入Bean的属性值或依赖对象。
属性命名规则--属性的前两个字母要么全部大写,要么全部小写,如:iC,aB这样的属性,spring容器启动会报异常。
2、构造函数注入
在Bean实例化的时候,注入属性值,在实例化后可使用。在注入时其中可细分为:
(1、)按类型匹配入参
如:public class Car{
...省略
public Car(string brand,double price){
this.brand = brand;
this.price = price;
}
}
注入的bean文件如下:
<bean id="car" class="com.baobao.ditype.Car">
<constructor-arg type="java.lang.String">
<value>红旗CA72</value>
<constructor-arg>
<constructor-arg type="double">
<value>20000</value>
</constructor-arg>
</bean>
(2、)按索引匹配入参
如:public class Car{
...省略
public Car(string brand,String corp,double price){
this.brand = brand;
this.corp = corp;
this.price = price;
}
}
配置文件如下:
<bean id="car" class="com.baobaotao.ditype.Car">
<--索引从0开始-->
<constructor-arg index="0" value="红旗CA72"/>
<constructor-arg
index="1" value="中国一汽"/>
<constructor-arg
index="2" value="2000"/>
</bean>
(3、)联合使用类型和索引匹配入参
如:public class Car{
...省略
public Car(string brand,String corp,double price){
this.brand = brand;
this.corp = corp;
this.price = price;
}
public Car(string brand,String corp,int maxSpeed){
this.brand = brand;
this.corp = corp;
this.price = price;
}
}
(注:多构造时,单独使用类型注入或索引注入都不能确定为哪个构造赋值,第三个属性值是不同的,因此使用索引加类型联合确定具体的构造函数)
配置文件如下:
<bean id="car" class="com.baobaotao.Car">
<constructor-arg
index="0" type="java.lang.String">
<value>红旗CA72</value>
</constructor>
<constructor-arg
index="1" type="java.lang.String">
<value>中国一汽</value>
</constructor>
<constructor-arg
index="2" type=“int">
<value>200</value>
</constructor>
</bean>
(4、通过自身类型反射匹配入参)
如:
public Boss(String name,Car car,Office office){
this.name=name;
this.car = car;
this.office=office;
}
配置文件如下:
<bean id="boss" class="com.baobaotao.ditype.Boss">
<!--这里没有设置type和index属性-->
<constructor-arg>
<value>John</value>
</constructor-arg>
<constructor-arg>
<ref bean="car"/>
</constructor-arg>
<constructor-arg>
<ref bean="office"/>
</constructor-arg>
</bean>
<bean id="car" class="com.baobaotao.ditype.Car"/>
<bean id="office" class="com.baobaotao.ditype.Office"/>
相关文章推荐
- angular2 学习笔记 ( DI 依赖注入 )
- spring学习笔记整理--05(编码剖析Spring依赖注入的原理)
- Spring学习笔记——Spring依赖注入原理分析
- 学习php反射(3)——一个依赖注入的例子
- 微软企业库4.1学习笔记(五)对象创建和依赖注入方法
- spring框架学习(二)依赖注入
- YII2框架学习 扩展篇(四) 依赖注入
- Angular 4依赖注入学习教程之组件服务注入(二)
- Angular 4依赖注入学习教程之Injectable装饰器(六)
- 依赖注入学习总结
- 依赖注入(Dependency injection )学习实记
- 【ASP.NET MVC 学习笔记】- 05 依赖注入工具Ninject
- Spring学习笔记(5)----依赖注入的简单实现
- Spring4第三讲学习笔记,依赖注入dependency injection
- spring学习总结(三):IOC & DI 配置 Bean 之配置形式及依赖注入方式
- spring框架学习(二)依赖注入
- Spring MVC快速教程:依赖注入 Spring MVC Fast Tutorial: Dependency Injection
- spring学习笔记 依赖注入详解
- spring学习(二)---依赖注入
- (转)[EntLib]微软企业库5.0 学习之路——第十步、使用Unity解耦你的系统—PART3——依赖注入