SpringDI的注入方式
- 
- 1.DI简介
 
- 2.DI注入的方式
- 
- 1.使用有参构造器方式进行注入
- 2.使用set方法进行注入
- 3.自动注入
 
- 3.DI其他类型值的注入
- 
- 1.array
- 2.list
- 3.set
- 4.map
 
- 5.Properties
为什么使用DI(依赖注入):
- 作用:给创建好的对象中的全局的属性或者对象进行赋值的操作
1.DI简介
- 英文全称(Dependency Injection)
- 中文名称:依赖注入
 依赖:一个类在另一个类中作为全局属性时
 注入:通过外部给自己属性(或其他内容)进行
- 类与类之间的关系:
 1、 继承(官方名称:泛化);
 2、 实现;
 3、 依赖:类和类之间的关系是偶然的,临时的.在代码层面另一个类当作这个类的方法参数或局部变量;
 4、 关联:类与类之间存在一定联系,可以是单向联系可以是双向联系.例如:学生和老师.(平时理解关联是一种强依赖),体现在代码层面,另一个类是这个类的全局属性;
 5、 聚合:类与类之间是可以单独存在的.但是有存在整体和部分的关系.例如:机箱和CPU.体现在代码层面:另一个类是这个类的全局属性;
 6、 组合:类与类之间是整体和部分之间的部分,不可分.例如人和心脏.体现在代码层面:另一个类是这个类的全局属性;
 7、 关系强度:组合>聚合>关联>依赖;
- DI的意义
 解除类与类之间高耦合性,给对象中全局对象赋值的操作
- 为什么称DI和IoC是同一个事情
 Spring帮助创建对象的过程叫做IoC,创建对象时给对象中全局对象赋值叫做DI,所以认为IoC和DI是同一个事情
2.DI注入的方式
1.使用有参构造器方式进行注入
    <bean id="cla" class="com.spring4.Clazz">
         <constructor-arg name="cname" value="高一(某)班"></constructor-arg
         <constructor-arg name="clazzno" value="507"></constructor-arg>
    </bean>
package com.bjsxt.spring4;
public class Clazz {
   
     
    private int clazzno;
    private String cname;
    public Clazz(int clazzno, String cname) {
   
     
        this.clazzno = clazzno;
        this.cname = cname;
    }
    public Clazz() {
   
     
    }
    public int getClazzno() {
   
     
        return clazzno;
    }
    public void setClazzno(int clazzno) {
   
     
        this.clazzno = clazzno;
    }
    public String getCname() {
   
     
        return cname;
    }
    public void setCname(String cname) {
   
     
        this.cname = cname;
    }
    @Override
    public String toString() {
   
     
        return "Clazz{" +
                "clazzno=" + clazzno +
                ", cname='" + cname + '\'' +
                '}';
    }
}
2.使用set方法进行注入
	<!--
        name:对象的属性名
        value和ref的使用场景
        value: 如果注入的属性类型是基本数据类型(包含String)使用value
        ref:如果注入的属性类型是对象这个时候使用ref
    -->
    <bean id="stu" class="com.spring4.Student">
        <property name="name" value="lisi"></property>
        <property name="sex" value="男"></property>
        <property name="age" value="20"></property>
        <property name="clazz" ref="DQCGM"></property>
    </bean>
package com.spring4;
public class Student {
   
     
    private String name;
    private String sex;
    private int age;
    private Clazz clazz;
    public Student(Clazz clazz) {
   
     
        System.out.println("--调用了有参构造---");
        this.clazz = clazz;
    }
    public Student(String name, String sex, int age, Clazz clazz) {
   
     
        this.name = name;
        this.sex = sex;
        this.age = age;
        this.clazz = clazz;
    }
    public Student() {
   
     
    }
    public String getName() {
   
     
        return name;
    }
    public void setName(String name) {
   
     
        this.name = name;
    }
    public String getSex() {
   
     
        return sex;
    }
    public void setSex(String sex) {
   
     
        this.sex = sex;
    }
    public int getAge() {
   
     
        return age;
    }
    public void setAge(int age) {
   
     
        this.age = age;
    }
    public Clazz getClazz() {
   
     
        return clazz;
    }
    public void setClazz(Clazz clazz) {
   
     
        this.clazz = clazz;
    }
    @Override
    public String toString() {
   
     
        return "Student{" +
                "name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", age=" + age +
                ", clazz=" + clazz +
                '}';
    }
}
3.自动注入
	<!--
        底层走的是set方法
        byName:这个时候就会在当前的xml中寻找【bean的ID名称】和需要注入实体中的【属性名】一致,进行匹配注入
        byType:这个时候就会在当前的xml中寻找【bean标签的类型】和需要注入实体中的【属性的类型】一致,进行匹配注入
        底层走的是构造器
        constructor:这个时候首先会根据[有参构造器的形参名]名称进行查找,如果名称没有一致的,在根据类型[有参构造器的类型]进行查找
        需要注意:*在指定的类中必须提供合适的有参构造器才可以
    -->
    <bean id="stu" class="com.spring4.Student" autowire="constructor"></bean>
3.DI其他类型值的注入
1.array
    <bean id="us" class="com.spring4.User">
        <property name="arr">
            <array>
                <value>A</value>
                <value>B</value>
                <value>C</value>
            </array>
        </property>
    </bean>
2.list
    <bean id="us" class="com.spring4.User">
        <property name="li">
            <list>
                <value>A</value>
                <value>B</value>
                <value>C</value>
            </list>
        </property>
    </bean>
3.set
    <bean id="us" class="com.spring4.User">
        <property name="se">
            <set>
                <value>A</value>
                <value>A</value>
                <value>B</value>
                <value>C</value>
            </set>
        </property>
    </bean>
4.map
    <bean id="us" class="com.spring4.User">
        <property name="map">
            <map>
                <entry>
                    <key>
                        <value>A</value>
                    </key>
                    <value>1</value>
                </entry>
                <entry>
                    <key>
                        <value>B</value>
                    </key>
                    <value>1</value>
                </entry>
                <entry>
                    <key>
                        <value>C</value>
                    </key>
                    <value>1</value>
                </entry>
            </map>
        </property>
    </bean>
5.Properties
    <bean id="us" class="com.spring4.User">
		<property name="pro">
    		<props>
    			<prop key="key">value</prop>
    		</props>
    	</property>
    </bean>