spring依赖注入
依赖注入定义:
依赖注入(Dependency Injection):它使spring框架核心IOC的具体体现吗,是表示在应用程序中表示层与层之间,对象与对象之间的关系。简单的说就是给类的成员变量赋值。
依赖注入的类型:
构造方法注入:
就是通过构造方法,给类的成员变量赋值
构造方法注入类:
public class ConstructorDaoImpl implements CustomerDao{
// 类的成员变量
private int id;
private String name;
private Integer age;
private Date birthday;
//构造方法
public ConstructorDaoImpl(int id, String name, Integer age, Date birthday) {
this.id = id;
this.name = name;
this.age = age;
this.birthday = birthday;
}
/**
* 保存客户操作
*/
public void saveCustomer() {
System.out.println("id="+id+",name="+name+",age="+age+",birthday="+birthday);
}
}
配置bean.xml
<bean id="constructDao" class="com.xt.dao.impl.ConstructorDaoImpl">
<constructor-arg index="0" name="id" type="int" value="1" ></constructor-arg>
<constructor-arg name="name" value="小明"></constructor-arg>
<constructor-arg name="age" value="18"></constructor-arg>
<constructor-arg name="birthday" ref="now"></constructor-arg>
</bean>
<!--配置java.util.Date-->
<bean id="now" class="java.util.Date"></bean>
标签说明:
标签:
constructor-arg
:指定通过构造方法给成员变量赋值
属性:
index
:成员变量在构造方法参数列表中的索引
name
:成员变量的名称(与index使用一个即可,实际项目中用的更多)
type
:成员变量的类型(默认即可)
value
:给java简单类型成员变量赋值(八种基本类型+字符串String)
ref
:给其他bean类型成员变量赋值
setter方法注入:
就是通过set方法,给类的成员变量赋值。
set方法注入类
public class SetDaoImpl implements CustomerDao{
// 类的成员变量
private int id;
private String name;
private Integer age;
private Date birthday;
//set方法
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setAge(Integer age) {
this.age = age;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
/**
* 保存客户操作
*/
public void saveCustomer() {
System.out.println("id="+id+",name="+name+",age="+age+",birthday="+birthday);
}
}
配置bean.xml
<bean id="setDao" class="com.xt.dao.impl.SetDaoImpl">
<property name="id" value="2"></property>
<property name="name" value="小花"></property>
<property name="age" value="18"></property>
<property name="birthday" ref="now"></property>
</bean>
<bean id="now" class="java.util.Date"></bean>
标签属性说明:
标签:
property
:指定通过set方法,给类的成员变量赋值
属性:
name
:指定成员变量名称
value
:给java简单类型成员变量赋值(八种基本类型+字符串String)
ref
:给其他bean类型成员变量赋值
依赖注入简化配置
p名称空间注入
就是原来的set方法注入,属性多,比较麻烦
配置bean.xml
<!--p名称空间注入,说明:
第一步:导入p名称空间
xmlns:p="http://www.springframework.org/schema/p"
第二步:
p:属性名称 ==>给java简单类型成员变量赋值
p:属性名称-ref ==>给其他bean类型成员变量赋值
-->
<bean id="pDao" class="com.xt.dao.impl.SetDaoImpl"
p:id="3" p:name="小王" p:age="18" p:birthday-ref="now"
></bean>
c名称空间注入
就是原来的构造方法注入
<!--c名称空间注入,说明:
第一步:导入c名称空间
xmlns:c="http://www.springframework.org/schema/c"
第二步:
c:属性名称 ==>给java简单类型成员变量赋值
c:属性名称-ref ==>给其他bean类型成员变量赋值
-->
<bean id="cDao" class="com.xt.dao.impl.ConstructorDaoImpl"
c:id="4" c:name="小黄" c:age="18" c:birthday-ref="now"
></bean>
集合属性的依赖注入
对于类中的成员变量是简单类型或者是bean类型,已经通过上面的方式赋值了 ,那对于集合类型该怎么赋值呢/
/**
* 学习集合属性成员变量赋值
*/
public class CollectionDaoImpl implements CustomerDao {
// 集合类型成员变量
private String[] array;
private List<String> list;
private Set<String> set;
private Map<String,String> map;
private Properties prop;
//===========================================set方法
public void setArray(String[] array) {
this.array = array;
}
public void setList(List<String> list) {
this.list = list;
}
public void setSet(Set<String> set) {
this.set = set;
}
public void setMap(Map<String, String> map) {
this.map = map;
}
public void setProp(Properties prop) {
this.prop = prop;
}
/**
* 保存客户操作
*/
public void saveCustomer() {
System.out.println(array !=null? Arrays.asList(array):"");
System.out.println(list);
System.out.println(set);
System.out.println(map);
System.out.println(prop);
}
}
配置bean.xml
<bean id="collectionDao" class="com.xt.dao.impl.CollectionDaoImpl">
<!--array-->
<property name="array">
<array>
<value>array1</value>
<value>array2</value>
</array>
</property>
<!--list-->
<property name="list">
<list>
<value>list1</value>
<value>list2</value>
</list>
</property>
<!--set-->
<property name="set">
<set>
<value>set1</value>
<value>set2</value>
</set>
</property>
<!--map-->
<property name="map">
<map>
<entry key="map-k1" value="map-v1"></entry>
<entry key="map-k2" value="map-v2"></entry>
</map>
</property>
<!--prop-->
<property name="prop">
<props>
<prop key="prop-k1">prop-v1</prop>
<prop key="prop-k2">prop-v2</prop>
</props>
</property>
</bean>
标签属性说明:
1.List结构:
array/list/set
2.Map结构:
map/prop
3.数据结构一致,标签可以互换