依赖注入(Dependency Injection):它是 Spring 框架核心 IOC 的具体实现。在编写程序时,通过控制反转,把对象的创建交给了 Spring,但是代码中不可能出现没有依赖的情况。IOC 解耦只是降低他们的依赖关系,但不会消除。例如:业务层仍会调用持久层的方法。那这种业务层和持久层的依赖关系,在使用 Spring 之后,就让 Spring 来维护了。简单的说,就是坐等框架把持久层对象传入业务层,而不用我们自己去获取。注意: DI 依赖IOC环境的
2.1、setter注入——引用类型
2.2、setter注入——简单类型
配置中使用property
标签value
属性注入简单类型数据
2.3、构造器注入——引用类型
配置中使用constructor-arg
标签ref
属性注入引用类型数据
2.4、构造器注入——简单类型
配置中使用constructor-arg
标签value
属性注入简单类型数据
2.5、构造器注入——参数适配
配置中使用constructor-arg
标签type
属性设置按形参类型注入
配置中使用constructor-arg
标签index
属性设置按形参位置注入
配置中使用bean
标签autowire
属性设置自动装配的类型
依赖自动装配特征
我们这里介绍注入数组,List,Set,Map,Properties。具体代码如下:
package com.etime.entity;
import java.util.*;
public class Test {
private String[] myStrs;
private List<String> myList;
private Set<String> mySet;
private Map<String,String> myMap;
private Properties myProps;
public Teacher() {
}
public String[] getMyStrs() {
return myStrs;
}
public void setMyStrs(String[] myStrs) {
this.myStrs = myStrs;
}
public List<String> getMyList() {
return myList;
}
public void setMyList(List<String> myList) {
this.myList = myList;
}
public Set<String> getMySet() {
return mySet;
}
public void setMySet(Set<String> mySet) {
this.mySet = mySet;
}
public Map<String, String> getMyMap() {
return myMap;
}
public void setMyMap(Map<String, String> myMap) {
this.myMap = myMap;
}
public Properties getMyProps() {
return myProps;
}
public void setMyProps(Properties myProps) {
this.myProps = myProps;
}
@Override
public String toString() {
return "Teacher{" +
"myStrs=" + Arrays.toString(myStrs) +
", myList=" + myList +
", mySet=" + mySet +
", myMap=" + myMap +
", myProps=" + myProps +
'}';
}
}
在Spring.xml文件中配置Test类(利用setter注入依赖集合数据)
<bean id="test" class="com.etime.entity.Test">
<property name="myStrs">
<array>
<value>abcvalue>
<value>efgvalue>
<value>kfcvalue>
array>
property>
<property name="myList">
<list>
<value>123value>
<value>234value>
list>
property>
<property name="mySet">
<set>
<value>987value>
<value>hfdvalue>
set>
property>
<property name="myMap">
<map>
<entry key="a" value="aaaa">entry>
<entry key="b" value="bbbb">entry>
map>
property>
<property name="myProps">
<props>
<prop key="c">ccccprop>
<prop key="d">ddddprop>
props>
property>
bean>
集合注入测试方法
@Test
public void t07(){
ApplicationContext context = new ClassPathXmlApplicationContext("application.xml");
Test t = (Test) context.getBean("test");
System.out.println(t);
}