spring依赖注入

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.数据结构一致,标签可以互换

原文地址:https://www.cnblogs.com/kt-ting/p/12572984.html